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

PostgreSQL中批量更新jsonb字段多键值的实现方法

更新PostgreSQL中jsonb字段的解决方案

嘿,我来帮你搞定这个问题!其实你要替换整个data字段的内容,没必要纠结jsonb_set(当然它也能实现,后面会说),最直接高效的方式就是直接赋值。

方法一:直接替换整个jsonb字段

因为你要把data完全改成目标JSON结构,直接用UPDATE语句赋值就行,代码如下:

UPDATE survey_results
SET data = '{"user":{"dob": "1995"},"survey":{"id": "1234"}}'::jsonb;

这里要注意:JSON语法要求字符串值和键都用双引号,你之前示例里的单引号是错误的,换成双引号才能被PostgreSQL正确解析为jsonb类型。

方法二:用jsonb_set实现(针对部分修改场景)

你之前尝试jsonb_set没成功,大概率是用法不对。jsonb_set适合修改JSON中的特定路径,而不是整体替换。如果一定要用它,需要嵌套调用分别修改user和survey路径:

UPDATE survey_results
SET data = jsonb_set(
    -- 先修改user路径,设置dob字段
    jsonb_set(data, '{user}', '{"dob": "1995"}'::jsonb),
    -- 再修改survey路径,设置id字段
    '{survey}', '{"id": "1234"}'::jsonb
);

不过这种方式在你完全替换整个data字段的场景下有点多余,不如直接赋值来得简洁。

补充说明

如果之后你需要只更新特定记录(比如只更新id=1的行),可以加上WHERE子句:

UPDATE survey_results
SET data = '{"user":{"dob": "1995"},"survey":{"id": "1234"}}'::jsonb
WHERE id = 1;

内容的提问来源于stack exchange,提问作者Mateusz Urbański

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:52:26