2017-05-31 8 views
0

私はid1とid2の2つの列を持つテーブルを持っています。PostgreSQLの接続の制約

たとえば、私がこれらの列にそれぞれfoo-barを持っていれば、入力bar-fooを禁止するという制約が必要です。

ありがとうございます!

+0

あなたが実行しているバージョン.. –

+0

私は、PostgreSQL 9.6.2 – zlaayaa

答えて

1
CREATE TABLE mytable(
    id1 integer, 
    id2 integer 
); 

CREATE UNIQUE INDEX ON mytable(least(id1, id2), greatest(id1, id2)); 

これはトリックDDOする必要があります?

test=> INSERT INTO mytable VALUES (1, 2); 
INSERT 0 1 
test=> INSERT INTO mytable VALUES (1, 3); 
INSERT 0 1 
test=> INSERT INTO mytable VALUES (2, 1); 
ERROR: duplicate key value violates unique constraint "mytable_least_greatest_idx" 
DETAIL: Key ((LEAST(id1, id2)), (GREATEST(id1, id2)))=(1, 2) already exists. 
+0

おかげで使用してMと、それはあまりにもテキストで働きます! – zlaayaa

+0

どのソート可能なタイプでも動作します。 – klin