我在postgresql中有一个唯一的约束来加入两个表中的Id
TableA
IdA
1
2
3
TableB
IdB
1
2
3
TableJoin
IdA IdB
1 1 --good
1 2 --good
1 3 --good
但如果我想插入另一个Id
。TableJoin
IdA IdB
1 1 --good
1 2 --good
1 3 --good
2 1 --return error, because already exist 1 2 (I need save 2 1)
2 2 --good
2 3 --good
3 1 --return error, because already exist 1 3 (I need save 3 1)
我的独特之处在于:
ALTER TABLE TableJoin ADD CONSTRAINT" UX_Join"独特(" IdA"," IdB");
如何插入两种方式(1 2 AND 2 1)?
另一个独特的变体?
Ty求助我!!!
答案 0 :(得分:0)
某处已经回答了。
基本上对于整数来说,最简单的就是创建像这样的英国:
create unique index uk on tablejoin (least(ida,idb), greatest(ida,idb))
对于非整数,您可以使用索引中的顺序添加到数组和不需要。甚至另一种方式是jsonb函数我相信。但是最大/最小是两个键整数索引的最佳选择...
这是一个例子:
t=# create table a (i int, e int);
CREATE TABLE
Time: 27.528 ms
t=# create unique index u on a (i,e);
CREATE INDEX
Time: 25.309 ms
t=# insert into a select 1,2;
INSERT 0 1
Time: 13.972 ms
t=# insert into a select 2,1;
INSERT 0 1
Time: 8.759 ms
t=# select * from a;
i | e
---+---
1 | 2
2 | 1
(2 rows)
Time: 14.570 ms
t=# create unique index u1 on a (least(i,e),greatest(i,e));
ERROR: could not create unique index "u1"
DETAIL: Key ((LEAST(i, e)), (GREATEST(i, e)))=(1, 2) is duplicated.
Time: 15.241 ms