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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:48:04