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

PostgreSQL JSONB数组更新:修改subsectionid=27的cc字段值

解决PostgreSQL JSONB数组特定元素字段更新问题

针对你的需求——更新JSONB数组中subsectionid=27的元素的cc字段,正确的SQL语句如下:

UPDATE jsondata
SET data = jsonb_set(
    data,
    -- 构建目标字段的路径:数组索引 + cc字段名
    ARRAY[(
        SELECT idx::text 
        FROM jsonb_array_elements(data) WITH ORDINALITY arr(elem, idx) 
        WHERE elem->>'subsectionid' = '27'
    ), 'cc'],
    '["Lake Providence"]'::jsonb  -- 要设置的cc字段值
)
-- 仅更新包含目标元素的行,避免无意义的更新操作
WHERE EXISTS (
    SELECT 1 
    FROM jsonb_array_elements(data) elem 
    WHERE elem->>'subsectionid' = '27'
);

原有语句的问题说明:

  1. WHERE条件无效:data->>'subsectionid' = '27'直接对整个JSONB数组使用->>操作符,无法提取数组内部元素的subsectionid值,因此不会匹配到任何数据行。
  2. 更新逻辑错误:data || '{null: ["Lake Providence"]}'::jsonb是将新的JSON对象追加到数组末尾,而非修改数组中已存在的目标元素。

执行上述正确语句后,通过SELECT * from jsondata;即可验证:subsectionid=27的元素的cc字段已成功更新为["Lake Providence"]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:10:02