如何更改整个 table 的 jsonb 对象数组值?
How to change jsonb object array value for entire table?
我有一个 table,其中有一个名为“columnsettings”的 JSONB 列。 jsonb 数据如下所示:.
[
{
"data": "id",
"width": 25
},
{
"data": "field_1",
"width": 125
},
{
"data": "field_3",
"width": 183
},
{
"data": "field_11",
"width": 125
}
]
我现在想 运行 更新 table 中的所有行并更改“数据”属性 ='newvalue' 其中数据值 ='field_1 " 例如:所有行的预期结果为:
[
{
"data": "id",
"width": 25
},
{
"data": "newvalue",
"width": 125
},
{
"data": "field_3",
"width": 183
},
{
"data": "field_11",
"width": 125
}
]
我似乎无法在 table 的所有行中找到更新此特定数组值的正确语法。
感谢任何帮助。
在通过应用 JSONB_ARRAY_ELEMENTS()
函数拆分数组元素后,您可以在包含条件的 UPDATE
语句中使用嵌套在 JSONB_AGG()
中的 JSONB_SET()
函数,例如
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
)
我有一个 table,其中有一个名为“columnsettings”的 JSONB 列。 jsonb 数据如下所示:.
[
{
"data": "id",
"width": 25
},
{
"data": "field_1",
"width": 125
},
{
"data": "field_3",
"width": 183
},
{
"data": "field_11",
"width": 125
}
]
我现在想 运行 更新 table 中的所有行并更改“数据”属性 ='newvalue' 其中数据值 ='field_1 " 例如:所有行的预期结果为:
[
{
"data": "id",
"width": 25
},
{
"data": "newvalue",
"width": 125
},
{
"data": "field_3",
"width": 183
},
{
"data": "field_11",
"width": 125
}
]
我似乎无法在 table 的所有行中找到更新此特定数组值的正确语法。 感谢任何帮助。
在通过应用 JSONB_ARRAY_ELEMENTS()
函数拆分数组元素后,您可以在包含条件的 UPDATE
语句中使用嵌套在 JSONB_AGG()
中的 JSONB_SET()
函数,例如
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
)