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

如何在PostgreSQL中实现jsonb_set的索引位置动态设置

你原有代码运行失败主要是两个语法问题:

  1. jsonb_set的第二个路径参数是文本数组类型,不能直接在字符串形式的数组字面量{}内嵌入表达式运算,必须通过数组构造函数动态生成路径
  2. 路径字符串中OneMoreKey多了多余的双引号,且CTE的查询结果没有和UPDATE语句正确关联

推荐用UPDATE的FROM子句直接关联计算索引,写法最简洁:

UPDATE jsonb_all_testing
SET jsonb_col = jsonb_set(
    jsonb_col,
    ARRAY['UserProfile', (position - 1)::TEXT, 'OneMoreKey']::TEXT[],
    '"NewValue"'::JSONB
)
FROM jsonb_array_elements(jsonb_col->'UserProfile') WITH ORDINALITY arr(elem, position)
WHERE 
    col1 = 2
    AND elem->>'ProfileName' = 'PMAdmin';
  • 这段代码会自动定位ProfileName为PMAdmin的数组元素,动态计算0起始的索引值,构造合法的路径参数完成键值对添加
  • 如果存在多个匹配的数组元素,会批量给所有符合条件的元素添加新键值对
  • 最终修改后的元素内容和你预期的完全一致:{"UserBand": "MEDIUM", "ProfileName": "PMAdmin","OneMoreKey":"NewValue"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:48:03