Sql 如何从JSONB数组中删除特定属性

Sql 如何从JSONB数组中删除特定属性,sql,postgresql,jsonb,Sql,Postgresql,Jsonb,我有一个PostgresJSONB列,其中包含如下数组:我想运行一个查询,从这些对象中删除“hide”属性 [ { "data": "id", "width": 25 }, { "data": "field_1", "width": 125 }, { &quo

我有一个PostgresJSONB列,其中包含如下数组:我想运行一个查询,从这些对象中删除“hide”属性

[
    {
        "data": "id",
        "width": 25
    },
    {
        "data": "field_1",
        "width": 125
    },
    {
        "data": "field_3",
        "hide": true,
        "width": 170
    },
    {
        "data": "addedby",
        "width": 178
    },
    {
        "data": "field_67",
        "width": 125,
        "hide": true
    }
]
运行后的预期输出为:

[
    {
        "data": "id",
        "width": 25
    },
    {
        "data": "field_1",
        "width": 125
    },
    {
        "data": "field_3",
        "width": 170
    },
    {
        "data": "addedby",
        "width": 178
    },
    {
        "data": "field_67",
        "width": 125
    }
]
我知道从JSONB属性中删除单个属性的方法如下所示:

update mytable set columnsettings = columnsettings -hide where tableid=55
但是如何指定从整个数组中删除此属性?
仅供参考,我正在运行postgres 11

只需使用
JSONB_ARRAY_ELEMENTS()
函数和减法运算符,以便在减去
hide
属性时导出数组中的每个元素,然后再次聚合数组中的单独元素,例如

SELECT JSONB_PRETTY( JSONB_AGG(jsdata) ) AS result
  FROM ( SELECT JSONB_ARRAY_ELEMENTS( columnsettings ) - 'hide' AS jsdata
           FROM mytable ) AS t
Update语句中的

UPDATE mytable
   SET columnsettings = ( SELECT JSONB_AGG(jsdata)
                           FROM ( SELECT JSONB_ARRAY_ELEMENTS( columnsettings ) 
                                      - 'hide' AS jsdata
                                    FROM mytable ) AS t )