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

Sam*_*ail 3 postgresql jsonb

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

我设法通过以下语句删除单个键:

UPDATE table_a
SET data_column = data_column #- '{attr_1}'
WHERE type = 'type_a'
Run Code Online (Sandbox Code Playgroud)

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

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

Ger*_*lle 9

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

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

  • 嘿@Gerard 你知道这是什么版本吗,当我尝试执行类似的东西时,我得到`operator does not exist: jsonb - text[]`? (2认同)

Iho*_*yuk 6

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

SELECT '{ "a": 1, "b": 2, "c": 3 }'::jsonb - ARRAY['a', 'b'];
Run Code Online (Sandbox Code Playgroud)


Lau*_*lbe 5

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

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

 ?column? 
----------
 {"c": 3}
(1 row)
Run Code Online (Sandbox Code Playgroud)


小智 5

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

UPDATE table_a
SET data_column = data_column - 'attr_1'- 'attr_2'- 'attr_3'
WHERE type = 'type_a'
Run Code Online (Sandbox Code Playgroud)