換句話說,是否有一種方法可以使數組列像集合一樣工作,也就是說,當重複值被添加到它時,它會被忽略?有沒有辦法來聲明PostgreSQL數組列來防止重複?
一個可能性是使用觸發器或確保執行SELECT
時元素的唯一性,但理想情況下我希望數組更像一個集合。
換句話說,是否有一種方法可以使數組列像集合一樣工作,也就是說,當重複值被添加到它時,它會被忽略?有沒有辦法來聲明PostgreSQL數組列來防止重複?
一個可能性是使用觸發器或確保執行SELECT
時元素的唯一性,但理想情況下我希望數組更像一個集合。
不,這是不可能的。但是,您可以使用自己的附加功能,該附加功能僅附加唯一值。
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)
在第二個選擇我認爲你的意思是'SELECT append_unique(ARRAY [1,2,3,4],4)' –
是的,修正了謝謝 –
我不認爲這是可能的。關係數據庫中的常用方法是創建適當的1:n關係,以便控制唯一性。 –