PostgreSQL 向现有JSON字段新增键值对的正确查询方法
PostgreSQL 向已有JSON/JSONB字段新增顶层键值对方案
执行JSON键值对新增时出现新内容溢出到JSON结构外部,通常由两个原因导致:
- 字段类型为
json而非jsonb时,直接使用||会触发字符串拼接而非JSON结构合并,导致格式错乱 - WHERE条件里的
id = "myId"写法错误,PostgreSQL中双引号用于标识字段/表名,字符串值需要用单引号包裹,写法错误可能导致匹配逻辑异常
对应场景正确写法
场景1:字段类型为jsonb(官方推荐存储JSON的类型)
直接使用jsonb自带的键合并操作符即可,会自动在顶层追加不存在的键,已存在的键会被新值覆盖:
UPDATE table_name SET column_name = column_name || '{"newValue": {"test": {}}}'::jsonb WHERE id = 'myId';
场景2:字段类型为json
先将字段转为jsonb完成合并操作,再转回json类型写回:
UPDATE table_name SET column_name = (column_name::jsonb || '{"newValue": {"test": {}}}'::jsonb)::json WHERE id = 'myId';
结果校验
执行更新后可运行如下查询确认结果符合预期:
SELECT column_name FROM table_name WHERE id = 'myId';
返回结果会在原有JSON结构顶层新增newValue键,不会出现内容溢出到JSON结构外的问题。
内容的提问来源于stack exchange,提问作者sandeep
相关产品推荐
相关产品推荐

