如何更改整个 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
   )

Demo