[英]PostgreSQL 9.1 primary key autoincrement
我正在尝试添加一个带有自动增量的主键。
我已经阅读了一些文档和其他问题 - 有SERIAL
和nextval()
语句,但它不起作用。
这是我做的:
CREATE TABLE IF NOT EXISTS "category" (
"id" integer SERIAL PRIMARY KEY,
"name" varchar(30) DEFAULT NULL
); // the error near "SERIAL"
和
CREATE SEQUENCE your_seq;
CREATE TABLE IF NOT EXISTS "category" (
"id" integer PRIMARY KEY nextval('your_seq'),
"name" varchar(30) DEFAULT NULL
); // the error near 'nextval'
我错了什么? 我只想将主键增加1。
serial
或多或少是一个列类型所以说integer serial
就像说text text
,只说serial
:
CREATE TABLE IF NOT EXISTS "category" (
"id" SERIAL PRIMARY KEY,
"name" varchar(30) DEFAULT NULL
);
如果你想自己创建序列,那么你想让id
的默认值成为序列中的下一个值,这意味着说default nextval('your_seq')
:
CREATE SEQUENCE your_seq;
CREATE TABLE IF NOT EXISTS "category" (
"id" integer PRIMARY KEY default nextval('your_seq'),
"name" varchar(30) DEFAULT NULL
);
要模拟通常的serial
行为,您还需要使表所拥有的序列:
alter sequence your_seq owned by category.id;
阅读本手册的“ 序列类型”部分可能会很有成效。
除非必须,否则我还建议您不要双重引用表和列名。 PostgreSQL会将你的标识符折叠成小写字母,因此id
和"id"
将是同一个东西,但不必要的引用是一个坏习惯,很容易导致各地的大量报价混乱。
如果有人需要修改现有表以添加具有自动增量的主键:
ALTER TABLE table_name ADD COLUMN pk_column_name SERIAL PRIMARY KEY;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.