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

如何在PostgreSQL的JSONB字段中保存井号(#)并执行UPDATE?

问题解决:JSONB字段更新报错的真正原因及正确写法

首先明确:报错和井号(#)完全无关,你看到的“没有WHERE子句”提示是SQL解析错误导致的误导,实际问题出在手动拼接JSON字符串时的转义处理不当。

正确的更新写法

方法一:使用jsonb_build_object(推荐)

这是PostgreSQL中构造JSONB最安全的方式,无需手动转义任何字符,彻底避免字符串拼接的语法问题:

UPDATE landingpage
SET introduction = introduction::jsonb || jsonb_build_object('EN', '#1', 'DE', '#2')
WHERE id = 5;

方法二:正确转义JSON字符串(不推荐,易出错)

如果你一定要用字符串拼接,确保SQL中的JSON字符串用单引号包裹,内部双引号无需转义(PostgreSQL中字符串用单引号标识,内部单引号才需要转义):

UPDATE landingpage
SET introduction = introduction::jsonb || '{"EN":"#1","DE":"#2"}'::jsonb
WHERE id = 5;

原写法报错的原因

你之前的SQL中使用了"(HTML转义的双引号),这不是SQL的合法转义方式,导致数据库无法正确解析JSON字符串,进而出现语法错误,最终错误提示被误导为“没有WHERE子句”。井号在PostgreSQL中不属于特殊字符,完全不需要转义。

内容的提问来源于stack exchange,提问作者WaYi1688

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:50:38