有没有办法声明PostgreSQL数组列,以防止重复?

时间:2014-02-15 08:34:02

标签: postgresql

换句话说,有没有办法让数组列像集合一样工作,也就是说,当向其中添加重复值时,它会被忽略?

一种可能性是在执行SELECT时使用触发器或确保元素的唯一性,但理想情况下我希望数组更像一个集合。

1 个答案:

答案 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)