首页 > 解决方案 > 在 PostgreSQL 中创建一个自动增加的主键列

问题描述

我正在关注CREATE TABLE中的示例:

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

但是,它给了我ERROR: syntax error at or near "GENERATED"。为什么会这样,我应该如何解决它?


编辑:

感谢@muistooshort,我检查了 9.4 文档。所以我执行:

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

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

标签: postgresqlcreate-table

解决方案


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类型将创建一个序列来提供值,将序列附加到表中,并连接一个默认值did以从序列中获取值。


推荐阅读