PostgreSQL更新jsonb类型字段触发语法错误如何解决?
报错原因
PostgreSQL无法直接解析SQL中裸写的{}格式JSON内容,你写的{'a': '', 'b': ''}没有用单引号包裹,也没有声明JSONB类型,所以触发语法报错。
解决方案
提供两种常用的正确写法:
- 写法1:JSON字符串强转类型
把JSON内容整体用单引号包裹后,通过::jsonb声明为jsonb类型即可,适合静态JSON写入场景:UPDATE test.product SET response_json = '{"a": "", "b": ""}'::jsonb WHERE "product_id" = 1; - 写法2:使用
jsonb_build_object函数构造
不需要手动拼接JSON字符串,直接传入键值对即可,适合动态赋值、JSON内容包含特殊字符需要避免转义问题的场景:UPDATE test.product SET response_json = jsonb_build_object('a', '', 'b', '') WHERE "product_id" = 1;
注意事项
- 单引号是SQL中字符串的标识,JSON内容作为字符串输入必须整体用单引号包裹,JSON内部的键值对要用双引号
- 如果JSON内容中包含单引号,需要把单引号转义为两个连续的单引号,或者直接使用
jsonb_build_object规避转义操作
内容的提问来源于stack exchange,提问作者Nupur
相关产品推荐
相关产品推荐

