在一个语句中从 jsonb 列中删除多个键
Posted
技术标签:
【中文标题】在一个语句中从 jsonb 列中删除多个键【英文标题】:Remove multiple keys from jsonb column in one statement 【发布时间】:2018-11-26 23:43:07 【问题描述】:我正在尝试从 jsonb
列中删除多个键。
我已经设法让它通过以下语句删除一个键:
UPDATE table_a
SET data_column = data_column #- 'attr_1'
WHERE type = 'type_a'
我知道那是一条路,所以我不能这样做:
#- 'attr_1,attr_2
根据文档,我应该也可以做 - 'attr_1'
但这不起作用,否则我会尝试尝试 - 'attr_1,attr2'
【问题讨论】:
【参考方案1】:这应该就像多次应用#-
运算符一样简单:
SELECT ' "a": 1, "b": 2, "c": 3 '::jsonb #- 'a' #- 'b';
?column?
----------
"c": 3
(1 row)
【讨论】:
现在看来很明显了。谢谢!【参考方案2】:或减号运算符一次(但使用文本数组):
SELECT ' "a": 1, "b": 2, "c": 3 '::jsonb - 'a,b'::text[];
?column?
----------
"c": 3
(1 row)
【讨论】:
嘿@Gerard 你知道这是什么版本,当我尝试执行类似的操作时我得到operator does not exist: jsonb - text[]
?
@GeorgeGreen,它是在 Postgre 10 中引入的 - postgresql.org/docs/10/functions-json.html。【参考方案3】:
如果您需要删除多个非嵌套键,您可以使用-
运算符:
SELECT ' "a": 1, "b": 2, "c": 3 '::jsonb - ARRAY['a', 'b'];
【讨论】:
【参考方案4】:减号的多种用法,如;
UPDATE table_a
SET data_column = data_column - 'attr_1'- 'attr_2'- 'attr_3'
WHERE type = 'type_a'
【讨论】:
【参考方案5】:我们想从表templates
的setting
中删除template_approval_type
。 setting
是 JSONb 列。
查询很简单:
UPDATE templates SET setting = setting::jsonb #- 'template_approval_type'
【讨论】:
【参考方案6】:UPDATE table_a
SET data_column = data_column - 'attr_1'
WHERE type = 'type_a';
【讨论】:
虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高答案的长期价值。您可以在帮助中心找到更多关于如何写好答案的信息:***.com/help/how-to-answer。祝你好运?以上是关于在一个语句中从 jsonb 列中删除多个键的主要内容,如果未能解决你的问题,请参考以下文章
我想在 PostgreSQL 的同一列中从另一个品牌中删除一些与一个品牌相关的客户