我有2个表,我正在尝试在两者之间创建Foreign Key
。这是我的表的结构:
create table users (
id serial,
user_name varchar(50)
);
create table playlists (
id serial,
user_id integer references users(id)
);
我一直收到这个错误:
ERROR: there is no unique constraint matching given keys for referenced table "users"
为什么没有unique constraint
?如果我在id
表中创建users
为integer PRIMARY KEY
,那么一切正常。如何在users
ID自动递增且FK
表格中为playlists
的情况下修复此问题?
答案 0 :(得分:2)
创建类型为serial
的列不会使其成为主键或以任何方式约束它。 serial
只创建一个integer
列,创建一个序列,并将序列附加到列以提供默认值。来自fine manual:
在当前实现中,指定:
CREATE TABLE tablename ( colname SERIAL );
相当于指定:
CREATE SEQUENCE tablename_colname_seq; CREATE TABLE tablename ( colname integer NOT NULL DEFAULT nextval('tablename_colname_seq') ); ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
如果您希望id serial
列成为主键(您几乎肯定会这样做),请说明:
create table users (
id serial not null primary key,
user_name varchar(50)
);
create table playlists (
id serial not null primary key,
user_id integer references users(id)
);