You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL:动态JSON拼接字符串时如何转义单引号?

解决PostgreSQL触发器中dblink传递含单引号JSON的语法错误问题

问题根源

直接拼接SQL字符串时,JSON内容里的单引号(比如{ "a": "It's a test" })会破坏SQL语句的引号闭合规则,引发语法报错,而动态数据无法手动逐个转义。

方案1:用quote_literal()自动转义

借助PostgreSQL内置的quote_literal()函数,自动把字符串中的单引号转为双单引号,同时为整个字符串添加外层单引号,彻底替代手动拼接引号的操作:

statement := 'INSERT INTO mytable(my_data) VALUES (' || quote_literal(my_json) || ')';
PERFORM dblink('my connection data', statement);

方案2:参数化查询(更安全,推荐)

使用dblink的参数传递功能,完全规避SQL字符串拼接操作,从根源解决转义问题,同时杜绝SQL注入风险:

PERFORM dblink('my connection data', 
               'INSERT INTO mytable(my_data) VALUES ($1)', 
               ARRAY[my_json]::text[]);

这里用$1作为占位符,将my_json放入参数数组传递,dblink会自动处理参数的转义逻辑。

内容的提问来源于stack exchange,提问作者Mr.D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:30:48