2014-02-15 94 views
0

換句話說,是否有一種方法可以使數組列像集合一樣工作,也就是說,當重複值被添加到它時,它會被忽略?有沒有辦法來聲明PostgreSQL數組列來防止重複?

一個可能性是使用觸發器或確保執行SELECT時元素的唯一性,但理想情況下我希望數組更像一個集合。

+0

我不認爲這是可能的。關係數據庫中的常用方法是創建適當的1:n關係,以便控制唯一性。 –

回答

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) 
+0

在第二個選擇我認爲你的意思是'SELECT append_unique(ARRAY [1,2,3,4],4)' –

+0

是的,修正了謝謝 –

相關問題