如何使串行字段自动增加并成为外键 - Postgres

时间:2015-11-29 02:21:22

标签: sql postgresql

我有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表中创建usersinteger PRIMARY KEY,那么一切正常。如何在users ID自动递增且FK表格中为playlists的情况下修复此问题?

1 个答案:

答案 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)
);