2015-11-06 57 views
0

我在Postgres數據庫中有一列使用枚舉值數組。我想檢查沒有值多次出現。具有不同約束條件的Postgres數組

CREATE TYPE myenum AS ENUM ('a', 'b', 'c'); 
CREATE TABLE mytable (
    id NUMBER PRIMARY KEY, 
    values myenum[] NOT NULL CHECK (/*condition here*/) 
); 

The documentation沒有提到檢查不同數組元素的函數。我在某處看到了對某個uniq函數的引用,但是我找不到任何文檔。在Postgres中可以做到這一點嗎?

+1

這將是一個適當的標準化模型排列很容易被不適合這種事情 –

+0

我就可以了這一點。您建議使用哪種Postgres數據類型? – Jorn

+0

就像這樣:http://pasted.co/d3d4a68f –

回答

0

您可以使用此功能:

create or replace function is_array_unique(arr anyarray) 
returns boolean language sql as $$ 
    select array_length(array_agg(distinct el), 1) = array_length(arr, 1) 
    from unnest(arr) el 
$$; 

select 
    is_array_unique(array[1,2,3,3]), 
    is_array_unique(array['a','b','c']), 
    is_array_unique(array['a','b','c','a']) 

is_array_unique | is_array_unique | is_array_unique 
-----------------+-----------------+----------------- 
f    | t    | f 
(1 row)