如何在PostgreSQL中实现jsonb_set的索引位置动态设置
你原有代码运行失败主要是两个语法问题:
jsonb_set的第二个路径参数是文本数组类型,不能直接在字符串形式的数组字面量{}内嵌入表达式运算,必须通过数组构造函数动态生成路径- 路径字符串中
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
相关产品推荐
相关产品推荐

