postgresql - 在 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"。为什么会这样,我应该如何解决它?
\! 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,我检查了 9.4 文档。所以我执行:
CREATE TABLE distributors (
did integer PRIMARY KEY DEFAULT nextval('serial'),
name varchar(40) NOT NULL CHECK (name <> '')
);
尽管如此,它现在给了我错误:关系“串行”不存在......
解决方案
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
类型将创建一个序列来提供值,将序列附加到表中,并连接一个默认值did
以从序列中获取值。
推荐阅读
- java - 将数据从 jsonarray 传递到表视图时出现 onClick 错误
- python-3.x - 为什么我的 font.name 属性不影响使用 Python-pptx 制作的 ppt 上的字体?我总是得到 arial 字体
- algorithm - 在 O(1) 时间内递增键、递减键、查找最大值键、查找最小值键
- python - 如果按钮发送发布请求,如何从网页中抓取 PDF 文件
- excel - 将不相邻的数据单元格复制到一个工作簿中
- regex - 是否可以在 FILTER 函数中添加 IF 函数?
- amazon-web-services - 使用 AWS CDK 配置 Lambda 预热器
- c - 如何将此流程图转换为 C 中的“可行”代码?
- python - 如何使用熊猫根据唯一天数删除记录?
- java - 有没有办法使用spring boot和jpa来维护活动日志?