如何改变jsonb对象数组值为整个表?



我有一个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
)

相关内容

  • 没有找到相关文章

最新更新