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

PostgreSQL:如何使用同表其他列更新jsonb类型数据?

用同表列值更新PostgreSQL jsonb字段的正确方法

你遇到的错误是因为直接将表列test.uuid写入了JSON字符串中——PostgreSQL会把这个字符串当作纯JSON解析,而test.uuid并不是合法的JSON语法,因此报错。

以下是两种正确实现需求的方法:

方法1:使用jsonb_build_object拼接JSON

通过jsonb_build_object函数动态构造要添加的JSON对象,它可以直接引用表列值并自动处理类型转换:

UPDATE test 
SET json_data = json_data || jsonb_build_object(
    'xyz', 
    jsonb_build_object('enabled', false, 'uuid', uuid)
);

方法2:使用jsonb_set精确设置路径

如果需要指定JSON对象的嵌套路径来插入或更新值,jsonb_set是更精准的选择:

UPDATE test 
SET json_data = jsonb_set(
    json_data, 
    '{xyz}', 
    jsonb_build_object('enabled', false, 'uuid', uuid)
);

注:jsonb_set的第四个参数默认为true,表示当目标路径不存在时自动插入,无需额外指定。

执行上述任一语句后,json_data字段会被正确更新为你期望的结构:

uuid                 | name |  json_data
--------------------------------------+------+-----------------------------------------------------------
 12345678-3ffd-472b-ac39-31eacc4a6785 | foo  | {"id": 1132, "xyz":{"enabled": false, "uuid": "12345678-3ffd-472b-ac39-31eacc4a6785"}}

内容的提问来源于stack exchange,提问作者Mari Kotlov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:37:15