postgresql重置序列起始值的操作
我就废话不多说了,⼤家还是直接看代码吧~
-- 序列重置到1000
alter sequence sequence_name restart with 1000
-- 验证
SELECT nextval('sequence_name');
补充:postgresql重置序列和⾃增主键
1. 问题背景
数据表中插⼊了⼏条测试数据,后⼜⼿动删除,导致后⾯插⼊数据的时候报主键冲突:
ERROR: duplicate key value violates unique constraint "tableName_pkey"
DETAIL: Key (id)=(1) already exists.
即使采⽤INSERT IGNORE的⽅式或者REPLACE INTO的⽅式还是报错,所以就想着重置⾃增序列和主键。
2. 解决办法
2.1 ⽅法⼀
(1)重置序列起始值为1
alter sequence xxx_id_seq restart with 1
(2)查看当前序列
SELECT nextval('xxx_id_seq ');
(3)重置⾃增主键
TRUNCATE tableName RESTART IDENTITY;truncate删除数据
2.2 ⽅法⼆
(1)清除所有的记录
TRUNCATE tablename questions CASCADE;
(2)清除所有的记录,并且索引号从0开始
TRUNCATE tablename questions RESTART IDENTITY CASCADE;
2.3 ⽅法三
也有可能是⾃增主键和序列不⼀致导致的,所以也可以不⽤重置序列起始值和主键,采取把序列号改成和当前最⼤主键⼀致的⽅式:
select setval('xxx_id_seq', max(id)) from tableName;
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。