换句话说,有没有办法让数组列像集合一样工作,也就是说,当向其中添加重复值时,它会被忽略?
一种可能性是在执行SELECT
时使用触发器或确保元素的唯一性,但理想情况下我希望数组更像一个集合。
答案 0 :(得分:3)
不,不可能。但是,您可以使用自己的追加函数,该函数仅附加唯一值。
CREATE OR REPLACE FUNCTION append_unique(anyarray, anyelement)
RETURNS anyarray AS $$
SELECT CASE WHEN $2 = ANY($1) THEN $1 ELSE $1 || $2 END;
$$ LANGUAGE sql;
postgres=# SELECT append_unique(ARRAY[1,2,3], 4);
append_unique
---------------
{1,2,3,4}
(1 row)
postgres=# SELECT append_unique(ARRAY[1,2,3,4], 4);
append_unique
---------------
{1,2,3,4}
(1 row)