PostgreSQL:仅当元素是唯一的时才将元素附加到jsonb数组

时间:2017-11-15 09:36:48

标签: sql json postgresql jsonb

我创建了一个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;

但是,我只想在元素尚未出现在数组中时附加元素。

1 个答案:

答案 0 :(得分:2)

您可以使用其他WHERE子句:

UPDATE test
SET animals = animals || '["[hamsters, 7]"]'::jsonb
WHERE id = 1 AND animals ~ '"\[hamsters, \d\]"'

这里我不使用jsonb,而只是使用正则表达式。避免嵌套数组,因为"[hamsters, 7]"本身无论如何都不是数组 - 只是一个字符串,所以我与字符串运算符进行比较......