PostgreSQL更新jsonb列布尔值遇类型错误的解决方案咨询
PostgreSQL更新jsonb字段布尔值的正确方案
可用实现方案
方案1:使用jsonb_set函数
你之前报错的核心原因是没有使用正确的布尔值转jsonb的方法,PostgreSQL不支持直接将布尔值强转为jsonb,需要调用to_jsonb()函数完成类型转换,正确写法如下:
UPDATE table_name SET jsonb_column_name = jsonb_set(jsonb_column_name, '{yellow}', to_jsonb(true), true)
方案2:使用||运算符拼接(更简洁)
jsonb类型支持||运算符用于合并两个jsonb结构,相同key的情况下后传入的值会覆盖原有值,写法更简单:
UPDATE table_name SET jsonb_column_name = jsonb_column_name || '{"yellow": true}'::jsonb
字符串替换转jsonb方案的安全性说明
绝对不推荐使用该方案,存在以下严重风险:
- 误替换问题:如果json数据的其他位置(比如其他字段的value、嵌套字段的key)出现和目标匹配的字符串,会被意外修改,导致数据错乱
- 结构匹配问题:如果存在同名的嵌套yellow字段,字符串替换无法精准匹配顶层的目标字段,会错误修改所有匹配内容
- 转义异常问题:如果json内容包含特殊转义字符,字符串替换可能破坏整体json结构,导致转jsonb时报错,或者生成非法的json数据
内容的提问来源于stack exchange,提问作者Jonathan Argentao
相关产品推荐
相关产品推荐

