【发布时间】:2021-06-09 18:58:07
【问题描述】:
我想设计一个查询,我可以在其中以受控方式将两个 jsonb 与 postgreSQL 中未知数量/组的元素组合在一起。 jsonb 运算符|| 几乎完全符合我的目的,但是对于其中一个 jsonb 元素,我想用逗号连接和分隔这两个值,而不是让第二个 jsonb 的值覆盖第一个值。例如:
'{"a":"foo", "b":"one", "special":"comma"}'::jsonb || '{"a":"bar", "special":"separated"}'::jsonb → '{"a":"bar", "b":"one", "special":"comma,separated"}'
我当前的查询如下:
INSERT INTO table AS t (col1, col2, col3_jsonb)
VALUES ("first", "second", '["a":"bar", "special":"separated"]'::jsonb))
ON CONFLICT ON CONSTRAINT unique_entries DO UPDATE
SET col3_jsonb = excluded.col3_jsonb || t.col3_jsonb
RETURNING id;
这会导致 col3_jsonb 的 jsonb 元素的值 special 设置为 separated 而不是所需的 comma,separated。我知道这是按记录工作的连接运算符,但我不确定如何以不同的方式处理 jsonb 的一个元素,而不是尝试在查询中的其他地方使用 WITH.. 子句提取特殊值。任何见解或提示将不胜感激!
【问题讨论】:
标签: postgresql jsonb postgresql-json