如何在PostgreSQL中更新JSONB类型的二级键名?
修改PostgreSQL jsonb字段中的二级键名
方法一:直接构造新对象替换(适合键少且固定的场景)
针对你的jsonb结构,可通过jsonb_set结合jsonb_build_object直接生成新的内层对象,替换原有的value节点:
UPDATE your_table SET your_jsonb_column = jsonb_set( your_jsonb_column, '{value}', jsonb_build_object( 'apple', your_jsonb_column->'value'->'a', 'ball', your_jsonb_column->'value'->'b', 'cat', your_jsonb_column->'value'->'c' ) ) -- 可选:仅更新包含目标键的行,避免无意义更新 WHERE your_jsonb_column->'value' ?& array['a', 'b', 'c'];
方法二:动态拆解重组(适合需保留其他键的场景)
如果value节点下还有其他需要保留的键,可通过jsonb_each_text拆解内层键值对,再用json_object_agg根据规则重命名后重组:
UPDATE your_table t SET your_jsonb_column = jsonb_set( t.your_jsonb_column, '{value}', ( SELECT jsonb_object_agg( CASE key WHEN 'a' THEN 'apple' WHEN 'b' THEN 'ball' WHEN 'c' THEN 'cat' ELSE key -- 保留未指定的原有键 END, value ) FROM jsonb_each_text(t.your_jsonb_column->'value') ) ) -- 可选:仅更新包含需修改键的行 WHERE t.your_jsonb_column->'value' ?| array['a', 'b', 'c'];
注意事项
- 替换语句中的
your_table和your_jsonb_column为实际的表名与字段名 - 方法一写法简洁直观,适合键数量少且明确的场景;方法二更灵活,能保留未指定的原有键
- WHERE子句可根据实际需求添加,减少不必要的行更新,提升执行效率
内容的提问来源于stack exchange,提问作者Riyaz
相关产品推荐
相关产品推荐

