我创建了一个 PostgreSQL (v10.0),如下所示。
CREATE TABLE test (id INT, animals jsonb)
INSERT INTO test VALUES
(1, '["[monkeys, 10]", "[hamsters, 7]", "[foxes, 3]"]'),
(2, '["[monkeys, 10]", "[hamsters, 7]", "[foxes, 3]"]')
然后我追加一个新的动物如下:
UPDATE test
SET animals = animals || '["[hamsters, 7]"]'::jsonb
WHERE id = 1;
但是,我只想在元素不在数组中时附加该元素。
最佳答案
你可以只使用额外的 WHERE
子句:
UPDATE test
SET animals = animals || '["[hamsters, 7]"]'::jsonb
WHERE id = 1 AND animals ~ '"\[hamsters, \d\]"'
这里我不使用 jsonb,而只是使用正则表达式。为了避免嵌套数组,并且因为 "[hamsters, 7]"
本身无论如何都不会是数组 - 只是一个字符串,所以我与字符串运算符进行比较......
关于sql - PostgreSQL:仅当元素唯一时才将元素附加到 jsonb 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47303844/