我不确定我是否正确地表达了这个问题,所以我会尝试更长的解释。我有这种表:
CREATE TABLE x (a int, b int);
我想将对(a,b)与(b,a)相同,并禁止插入重复项。如果PostgreSQL有一个set
数据类型,我可能会声明这样的表:
CREATE TABLE x (
ab set,
UNIQUE (ab)
);
但事实并非如此,那么最好的方法是什么?
答案 0 :(得分:4)
create unique index idx_unique_ab
on x (least(a,b), greatest(a,b));
答案 1 :(得分:1)
我只是强制执行一对只能以一种方式存储,然后创建一个常规的唯一约束。
CREATE TABLE x
(
a INT,
b INT,
CHECK (a < b),
UNIQUE(a, b)
);