PostgreSQL连接约束

时间:2017-05-31 09:20:18

标签: sql postgresql

我有两列的表,id1和id2。

如果我在这些列中分别有foo-bar,我需要一个禁止输入bar-foo的约束。

谢谢!

1 个答案:

答案 0 :(得分:1)

CREATE TABLE mytable(
   id1 integer,
   id2 integer
);

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

这应该是技巧:

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.