1、示例:user表设置主键user_id自增
-- 创建序列
CREATE SEQUENCE user_id_seq;
-- 使用模式的情况创建序列
CREATE SEQUENCE 模式名.user_id_seq;
-- 字段设置序列
ALTER TABLE user
ALTER COLUMN user_id SET DEFAULT nextval('user_id_seq');
-- 使用模式的情况
ALTER TABLE 模式名.user
ALTER COLUMN user_id SET DEFAULT nextval('模式名.user_id_seq');
2、主键自增常见问题(设置主键自增序列后,添加数据,提示类似“Key (id)=(1849) already exists”,主键已存在的错误)
一般是因为手动插入数据(大部分情况是通过可视化的sql工具直接插入了数据,并给主键id带了值)导致的,此时PG无法触发自增序列,当通过正常sql插入数据时,PG触发自增序列,就会导致和手动插入的id冲突,下面给出解决语句
-- 手动将对应表中自增字段序列的当前值设置为user中对应的最大值
select setval('user_id_seq', max(user_id)) from user;
-- 使用模式的情况
select setval('模式名.user_id_seq', max(user_id)) from 模式名.user;