我在postgres 9.5中有下表:
order
我想在两个列上添加限制,只允许记录集
它应该像这样:
CREATE TABLE public.test
(
id bigint NOT NULL DEFAULT nextval('test_id_seq'::regclass),
id1 integer,
id2 integer,
CONSTRAINT test_pkey PRIMARY KEY (id)
);
对于限制1,我添加了:
id | id1 | id2
---------------
1 | 1 | 1 <-- invalid (violates restriction 3.)
2 | 1 | 2 <-- valid
3 | 1 | 2 <-- invalid (violates restriction 1.)
4 | 2 | 1 <-- invalid (violates restriction 2.)
5 | 3 | 1 <-- valid
6 | 3 | 2 <-- valid
但是如何为2.和3添加约束。?
在a_horse_with_no_name:
的帮助下的最终解决方案ALTER TABLE test ADD CONSTRAINT test_id1_id2_unique UNIQUE(id1, id2);
答案 0 :(得分:0)
您可以创建一个唯一索引来涵盖1.和2.
create unique index on test ( least(id1,id2), greatest(id1,id2) );
对于3.您需要检查约束:
CREATE TABLE public.test
(
id bigint NOT NULL DEFAULT nextval('test_id_seq'::regclass),
id1 integer,
id2 integer,
constraint check_not_equal check (id1 is distinct from id2),
CONSTRAINT test_pkey PRIMARY KEY (id)
);
您可能希望两个ID都为NOT NULL
。在这种情况下,您还可以使用check (id1 <> id2)