PostgreSQL设置主键自增序列的方法及常见问题解决(主键已存在)

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值