使用 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"
}
]
}
我的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"
}
]
}