在 PostgreSQL 中创建一个自动增加的主键列
Create an automatically increasing primary key column in PostgreSQL
我正在按照 CREATE TABLE 中的示例进行操作:
CREATE TABLE distributors (
did integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
name varchar(40) NOT NULL CHECK (name <> '')
);
但是,它给我 错误:"GENERATED" 处或附近的语法错误。为什么会这样,我该如何解决?
\! psql -V
returns psql (PostgreSQL) 10.5 (Ubuntu 10.5-1.pgdg14.04+1)
SELECT version();
returns PostgreSQL 9.4.19 on x86_64-pc-linux-gnu (Ubuntu 9.4.19-1.pgdg14.04+1), 已编译通过 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 <> '')
);
然而,它现在给我 错误:关系 "serial" 不存在 ...
SQL 标准 IDENTITY
已添加到 PostgreSQL 10 中,但您的服务器(完成所有实际工作)是 9.4。在 10 之前你必须使用 serial
或 bigserial
类型:
CREATE TABLE distributors (
did serial not null primary key,
name varchar(40) NOT NULL CHECK (name <> '')
);
serial
type 将创建一个序列来提供值,将序列附加到 table,并连接 did
的默认值以从序列中获取值。
我正在按照 CREATE TABLE 中的示例进行操作:
CREATE TABLE distributors (
did integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
name varchar(40) NOT NULL CHECK (name <> '')
);
但是,它给我 错误:"GENERATED" 处或附近的语法错误。为什么会这样,我该如何解决?
\! psql -V
returns psql (PostgreSQL) 10.5 (Ubuntu 10.5-1.pgdg14.04+1)SELECT version();
returns PostgreSQL 9.4.19 on x86_64-pc-linux-gnu (Ubuntu 9.4.19-1.pgdg14.04+1), 已编译通过 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 <> '')
);
然而,它现在给我 错误:关系 "serial" 不存在 ...
SQL 标准 IDENTITY
已添加到 PostgreSQL 10 中,但您的服务器(完成所有实际工作)是 9.4。在 10 之前你必须使用 serial
或 bigserial
类型:
CREATE TABLE distributors (
did serial not null primary key,
name varchar(40) NOT NULL CHECK (name <> '')
);
serial
type 将创建一个序列来提供值,将序列附加到 table,并连接 did
的默认值以从序列中获取值。