我有一个JSONB列名为"columnsettings"jsonb数据如下所示:
[
{
"data": "id",
"width": 25
},
{
"data": "field_1",
"width": 125
},
{
"data": "field_3",
"width": 183
},
{
"data": "field_11",
"width": 125
}
]
我现在想对表中的所有行运行更新,并更改"数据"。属性='newvalue',其中数据值='field_1"所有行的预期结果将是:
[
{
"data": "id",
"width": 25
},
{
"data": "newvalue",
"width": 125
},
{
"data": "field_3",
"width": 183
},
{
"data": "field_11",
"width": 125
}
]
我似乎找不到正确的语法来更新表中所有行的这个特定数组值。如有任何帮助,不胜感激。
您可以使用嵌套在JSONB_AGG()
中的JSONB_SET()
函数在包含条件的UPDATE
语句中,通过应用JSONB_ARRAY_ELEMENTS()
函数(如
UPDATE tab
SET columnsettings =
(
SELECT JSONB_AGG(CASE WHEN j ->> 'data' = 'field_1' THEN
JSONB_SET(j, '{data}', '"newvalue"')
ELSE
j
END)
FROM JSONB_ARRAY_ELEMENTS(columnsettings) AS j
)