这个问题在这里已有答案:
在PostgreSQL中使用以下查询创建两个表时:
create table test_unique_pk (
id serial primary key,
value varchar not null
);
create table refer_unique_pk (
id integer,
value varchar,
foreign key (id, value) references test_unique_pk(id, value)
);
我有
there is no unique constraint matching given keys for referenced table "test_unique_pk".
如果我将第一个表修改为
create table test_unique_pk (
id serial primary key,
value varchar not null,
unique(id, value)
);
它运作正常。
然而,由于主键已经是唯一的,在我看来,复合(id, value)
也应该是唯一的,因为我们不能构造具有相同id
的两个元组,因此我们不能构造两个相等的(id, value)
元组。
如果上面的语句是正确的,为什么PostgreSQL不会在包括主键的复合引用上自动添加唯一约束?
主键的定义应该是唯一的,而不是同时为空。 NULL值总是像“未知”值,所以你不能使用这个insite PK。