PostgreSQL的postgres.bki文件中如何实现自增ID列(替代SERIAL)?
在postgres.bki中实现自增ID(替代SERIAL类型)
SERIAL类型本质是整数列 + 关联序列 + 默认值为序列的nextval(),由于postgres.bki不支持SERIAL这种语法糖,你需要手动拆解这三个步骤来实现:
1. 创建对应序列
在bki文件中先添加序列创建语句,格式如下:
CREATE SEQUENCE my_table_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
2. 创建包含整数列的表
定义表时,先声明一个整数类型的列(比如int4),暂不指定默认值:
CREATE TABLE my_table ( id int4 NOT NULL, -- 其他列定义... );
3. 给列绑定序列的nextval作为默认值
通过ALTER TABLE语句为id列设置默认值,关联之前创建的序列:
ALTER TABLE my_table ALTER COLUMN id SET DEFAULT nextval('my_table_id_seq'::regclass);
4. 可选:绑定序列与表列的归属关系
如果希望删除表时自动清理关联的序列,可执行:
ALTER SEQUENCE my_table_id_seq OWNED BY my_table.id;
参考系统表的实现逻辑
PostgreSQL系统表(比如pg_class的oid列)的自增机制,也是通过手动绑定预定义序列实现的,和上述逻辑一致。
注意:postgres.bki中的语句执行顺序必须正确——先创建序列,再建表,最后设置默认值和归属关系。
内容的提问来源于stack exchange,提问作者Jotaro
相关产品推荐
相关产品推荐

