【发布时间】:2023-04-01 11:42:01
【问题描述】:
我正在关注CREATE TABLE中的示例:
CREATE TABLE distributors (
did integer PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
name varchar(40) NOT NULL CHECK (name <> '')
);
但是,它给了我错误:在“GENERATED”或附近出现语法错误。为什么会这样,我应该如何解决?
-
\! psql -V返回 psql (PostgreSQL) 10.5 (Ubuntu 10.5-1.pgdg14.04+1) -
SELECT version();在 x86_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 <> '')
);
尽管如此,它现在给了我错误:关系“序列”不存在...
【问题讨论】:
-
psql来自 PostgreSQL 10.5 但服务器运行的是哪个版本的 PostgreSQL? -
@muistooshort
SELECT version();给了我 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位。这是否意味着我应该阅读 9.4 版而不是 10 版的文档? -
是的,请查看 9.4 文档。 AFAIK
IDENTITY是在版本 10 中添加的,您需要在 9.4 中使用serial。 -
@muistooshort 我刚刚尝试过,但又失败了。你介意检查我的编辑吗?我是否应该创建关系
serial只是为了创建distributors? -
我需要比评论提供更多的空间,所以我添加了一个答案。