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
相关产品推荐
相关产品推荐

