Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL:仅当元素唯一时才将元素追加到jsonb数组_Sql_Json_Postgresql_Jsonb - Fatal编程技术网

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

PostgreSQL:仅当元素唯一时才将元素追加到jsonb数组,sql,json,postgresql,jsonb,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

我创建了一个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,而是使用正则表达式。为了避免嵌套数组,因为
“[仓鼠,7]”“
本身无论如何都不是数组-只是一个字符串,所以我比较了字符串操作符