sql - 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 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/

相关文章:

mysql - 带有日期的唯一名称

javascript - 使用javascript调用webservice的问题

java - Jackson 反序列化是否有继承深度的最大值?

sql - 如何在 Sql Server 2008 中的一个 MERGE 查询中更新、插入、删除?

mysql - 更改表但外键约束失败

json - 服务器端排序的数据在数据表中未按相同顺序显示

python - psycopg2:在连接到 PostgreSQL 的 Python 中显示多列数据时出错

sql - 如何获取表中某列的最大值?

arrays - 在 postgres jsonb 数组中查找对象的位置

mysql - 如何检查列 A IN (3,4,5) 和 A NOT IN (1,2)