PostgreSQL中jsonb类型数组字段新增与更新值操作问题
PostgreSQL jsonb数组操作解决方案
原有语句的问题
- 操作路径错误:指定的路径
{invoice }拼写错误且多余空格,实际需要操作的是Items数组字段 - 未基于原有数组修改:直接赋值新值导致原有数组内容被覆盖
操作1:向Items数组末尾新增值"5"
使用||运算符拼接原有数组和新元素,再通过jsonb_set更新字段:
UPDATE public.invoice SET json_data = jsonb_set( json_data, '{Items}', json_data -> 'Items' || '"5"'::jsonb ) WHERE id = 1;
执行后Items数组为["2", "3", "1","5"]
操作2:将Items数组中的"2"更新为"9"
已知"2"位于数组第0位(从0开始计数)
直接指定索引位置更新:
UPDATE public.invoice SET json_data = jsonb_set( json_data, '{Items, 0}', '"9"'::jsonb ) WHERE id = 1;
不确定"2"的索引位置,按值匹配替换
遍历数组元素替换后重新聚合:
UPDATE public.invoice SET json_data = jsonb_set( json_data, '{Items}', ( SELECT jsonb_agg(CASE WHEN elem = '"2"'::jsonb THEN '"9"'::jsonb ELSE elem END) FROM jsonb_array_elements(json_data -> 'Items') AS elem ) ) WHERE id = 1;
执行后Items数组为["9", "3", "1","5"]
内容的提问来源于stack exchange,提问作者user2859698
相关产品推荐
相关产品推荐

