我在 PostgreSQL 数据库中有一些列是数组。如果该值不存在,我想在其中添加一个新值(在
UPDATE
中),否则,不要添加任何内容。我不想覆盖数组的当前值,只想将元素添加到其中。
是否可以用普通 SQL 执行此操作,或者我需要一个函数吗?我正在使用 PostgreSQL。
这应该像整数数组的示例一样简单 (
integer[]
):
UPDATE tbl SET col = col || 5
WHERE (5 = ANY(col)) IS NOT TRUE;
一个
WHERE
子句,例如:
WHERE 5 <> ALL(col)
也会捕获空数组
'{}'::int[]
的情况,但如果 NULL
值作为数组元素出现,则会失败。
如果您的数组从不包含 NULL 作为元素,请考虑实际的数组运算符,可能由 GIN 索引支持。
UPDATE tbl SET col = col || 5
WHERE NOT col @> '{5}';
参见: