在一个语句中从 jsonb 列中删除多个键

Remove multiple keys from jsonb column in one statement

我正在尝试从 jsonb 列中删除多个键。

我已经设法使用以下语句删除单个密钥:

UPDATE table_a
SET data_column = data_column #- '{attr_1}'
WHERE type = 'type_a'

我知道那是一条路,所以我不能这样做: #- '{attr_1,attr_2}

根据文档,我应该也可以做 - 'attr_1',但那没有用,否则我会尝试尝试 - 'attr_1,attr2'

这应该像多次应用 #- 运算符一样简单:

SELECT '{ "a": 1, "b": 2, "c": 3 }'::jsonb #- '{a}' #- '{b}';

 ?column? 
----------
 {"c": 3}
(1 row)

或减号运算符一次(但使用文本数组):

SELECT '{ "a": 1, "b": 2, "c": 3 }'::jsonb - '{a,b}'::text[];
 ?column? 
----------
 {"c": 3}
(1 row)

如果您需要删除多个 non-nested 键,您可以使用 - 运算符:

SELECT '{ "a": 1, "b": 2, "c": 3 }'::jsonb - ARRAY['a', 'b'];

减号运算符的多种用法,例如;

UPDATE table_a
SET data_column = data_column - 'attr_1'- 'attr_2'- 'attr_3'
WHERE type = 'type_a'

我们想从 table templatessetting 中删除 template_approval_typesetting 是一个 JSONb 列。

查询非常简单:

UPDATE templates SET setting = setting::jsonb #- '{template_approval_type}'
UPDATE table_a
SET data_column = data_column - 'attr_1'
WHERE type = 'type_a';