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

PostgreSQL中JSON列更新失败求助:修正指定JSON字段值

修复PostgreSQL JSONB字段更新失败的问题

你的JSONB更新语句失败是因为jsonb_set函数的参数使用错误,下面我帮你拆解问题并给出正确的解决方案:

问题分析

原SQL语句中,你错误地给jsonb_set传递了多余的参数,不符合该函数的标准签名:

jsonb_set(target jsonb, path text[], new_value jsonb, create_missing boolean DEFAULT true)

你把要更新的子路径'{ada}'和新对象当成了独立参数,导致函数无法正确解析要更新的位置和值。

正确的更新语句

根据你的输入和期望输出,我们只需要修改ada对象下的adapartialcurrentperiod字段值,正确的SQL如下:

UPDATE data_file 
SET json_data = jsonb_set(
    json_data::jsonb,
    '{tables, li_daily_sales_ll, ada, adapartialcurrentperiod}'::text[],
    '202001'::jsonb,
    true
) 
WHERE data_file_id = 475;

关键说明:

  • 路径参数'{tables, li_daily_sales_ll, ada, adapartialcurrentperiod}'精确定位到要修改的字段
  • 新值直接传入'202001'::jsonb,保持和原字段一致的数字类型
  • 最后一个true参数表示如果路径不存在则自动创建(这里路径肯定存在,也可以省略)

另一种可选写法(更新整个ada对象)

如果你需要替换整个ada对象(比如同时修改多个字段),可以这样写:

UPDATE data_file 
SET json_data = jsonb_set(
    json_data::jsonb,
    '{tables, li_daily_sales_ll, ada}'::text[],
    jsonb_build_object(
        'adatype', 'Partial',
        'adatargettablename', 'xxxxxxx.xxxxxxxxxx',
        'adaprimarykeycols', null,
        'adafilter', null,
        'adahistorypartitioncols', 'xxxxxxx',
        'adapartialcurrentperiod', 202001
    ),
    true
) 
WHERE data_file_id = 475;

这种写法适合需要批量修改ada下多个字段的场景,但如果只改单个字段,第一种写法更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:52:51