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

时间:2018-06-18 07:04:23

标签: postgresql jsonb

我试图从jsonb列中删除多个密钥。

我已设法通过以下语句删除单个密钥:

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

我理解这是一条道路所以我无法做到: #- '{attr_1,attr_2}

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

5 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

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

var formData = $('#myForm').serializeArray();
formData.push({name: 'id', value: idValue});
formData.push({name: 'img', value: imgValue});

答案 2 :(得分:0)

如果您需要删除非嵌套键,则可以使用-运算符:

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

查询很简单:

UPDATE templates SET setting = setting::jsonb #- '{template_approval_type}'