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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:39:27