是否有方法声明PostgreSQL数组列以防止重复?

是否有方法声明PostgreSQL数组列以防止重复?,postgresql,Postgresql,换句话说,有没有办法使数组列像集合一样工作,也就是说,当向其中添加重复值时,它将被忽略 一种可能是在执行选择时使用触发器或确保元素的唯一性,但理想情况下我希望数组更像一个集合。不,这是不可能的。但是,您可以使用自己的append函数,它只附加唯一的值 CREATE OR REPLACE FUNCTION append_unique(anyarray, anyelement) RETURNS anyarray AS $$ SELECT CASE WHEN $2 = ANY($1) THEN $

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


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

不,这是不可能的。但是,您可以使用自己的append函数,它只附加唯一的值

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)

不,这是不可能的。但是,您可以使用自己的append函数,它只附加唯一的值

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)

不,这是不可能的。但是,您可以使用自己的append函数,它只附加唯一的值

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)

不,这是不可能的。但是,您可以使用自己的append函数,它只附加唯一的值

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)

我认为那是不可能的。在关系数据库中,通常的方法是创建适当的1:n关系,在其中可以控制唯一性。我认为这是不可能的。在关系数据库中,通常的方法是创建适当的1:n关系,在其中可以控制唯一性。我认为这是不可能的。在关系数据库中,通常的方法是创建适当的1:n关系,在其中可以控制唯一性。我认为这是不可能的。在关系数据库中,通常的方法是创建适当的1:n关系,您可以在其中控制唯一性。在第二个选择中,我认为您的意思是
select append\u unique(ARRAY[1,2,3,4],4)
在第二个选择中,我认为您的意思是
select append\u unique(ARRAY[1,2,3,4],4)
在第二个选择中,我想你的意思是
选择append_unique(数组[1,2,3,4],4)
在第二个选择中,我想你的意思是
选择append_unique(数组[1,2,3,4],4)