使用 where 条件更新 PostgreSQL 中的 jsonb 数据

update jsonb data in PostgreSQL using where condition

我的table“Item”有两列id和value,value是一个jsonb,它的值是

{
"id": "0030e363-bd50-4c68-a127-07c8a6a35c47",
"fields": [
    {
        "value": "14",
        "field_title": "Code"
    },
    {
        "value": "name1",
        "field_title": "Name"
    },
    {
        "value": "452",
        "field_title": "Title"
    }
]
}

如何更新“field_title”=“代码”的“字段”中的值字段?

你可以在提取数组fields的元素后使用JSONB_SET()函数,同时确定各自的索引,如

WITH f AS
(
 SELECT ('{fields,'||idx-1||',value}')::text[] AS path
   FROM tab 
  CROSS JOIN JSONB_ARRAY_ELEMENTS(value->'fields') 
   WITH ORDINALITY arr(j,idx)
  WHERE j->>'field_title'='Code' 
)
UPDATE tab
   SET value = JSONB_SET(value,f.path,'"1444"',false)
  FROM f;

SELECT value FROM tab;

value
-------------------------------
{
"id": "0030e363-bd50-4c68-a127-07c8a6a35c47",
"fields": [
    {
        "value": "1444",
        "field_title": "Code"
    },
    {
        "value": "name1",
        "field_title": "Name"
    },
    {
        "value": "452",
        "field_title": "Title"
    }
]
}

Demo