在PostgreSQL中创建一个自动增加的主键列

时间:2018-08-15 03:34:50

标签: postgresql create-table

我正在遵循CREATE TABLE中的示例:

CREATE TABLE distributors (
     did    integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
     name   varchar(40) NOT NULL CHECK (name <> '')
);

但是,它给了我 ERROR:“ GENERATED”处或附近的语法错误。为什么会这样,我应该如何解决?

  • \! psql -V返回 psql(PostgreSQL)10.5(Ubuntu 10.5-1.pgdg14.04 + 1)
  • SELECT version();在xcc_64-pc-linux-gnu(Ubuntu 9.4.19-1.pgdg14.04 + 1)上返回 PostgreSQL 9.4.19,由gcc(Ubuntu 4.8.4-2ubuntu1〜)编译14.04.4)4.8.4,64位

编辑:

由于@muistooshort,我选中了the 9.4 docs。所以我执行:

CREATE TABLE distributors (
     did    integer PRIMARY KEY DEFAULT nextval('serial'),
     name   varchar(40) NOT NULL CHECK (name <> '')
);

尽管如此,它现在给我错误:关系“序列”不存在 ...

1 个答案:

答案 0 :(得分:1)

SQL标准IDENTITY已添加到PostgreSQL 10中,但是您的服务器(完成所有实际工作)为9.4。在10之前,您必须使用serialbigserial类型:

CREATE TABLE distributors (
     did    serial not null primary key,
     name   varchar(40) NOT NULL CHECK (name <> '')
);

serial type将创建一个序列以提供值,将该序列附加到表中,并为did连接一个默认值以从序列中获取值。