我想设计一个查询,我可以在其中以受控方式将两个 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;
这导致 jsonb 元素col3_jsonb
的值 special 设置为separated
而不是 desired comma,separated
。我知道这是按照文档说明工作的连接运算符,但我不确定如何以不同的方式处理 jsonb 的一个元素,而不是尝试WITH..
在查询中的其他地方使用子句提取特殊值。任何见解或提示将不胜感激!