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

PostgreSQL如何用单条UPDATE语句同时更新JSONB的两个嵌套属性

单条UPDATE更新JSONB多字段解决方案

完全可以通过单条UPDATE语句完成两个字段的同时更新,无需分开执行,常见有两种实现方案:

方案1:嵌套调用JSONB_SET

利用JSONB_SET返回修改后JSONB对象的特性,嵌套调用即可连续修改多个路径的字段:

UPDATE toys 
SET data = JSONB_SET(
    JSONB_SET(data, '{toy,available}', 'false'::jsonb),
    '{toy,price}', '0'::jsonb
)
WHERE data->'toy'->>'id' = '27';

该方案的执行逻辑是先修改available字段,再基于修改后的结果修改price字段,全程只对符合条件的行做一次更新操作。

方案2:使用||合并操作符

如果需要修改的字段较多,嵌套写法可读性较差,可以用JSONB的合并操作符直接覆盖对应字段,写法更直观:

UPDATE toys 
SET data = data || jsonb_build_object(
    'toy', 
    data->'toy' || jsonb_build_object('available', false, 'price', 0)
)
WHERE data->'toy'->>'id' = '27';

该方案先把需要修改的键值对和原toy子对象合并(重复键会用右侧的新值覆盖),再把新的toy对象合并回原data字段中。

两种方案的执行效果和你原有两条UPDATE语句的效果完全一致,且性能更优,避免了两次扫描匹配相同行的开销。

内容的提问来源于stack exchange,提问作者Benk I

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:15:02