有没有办法将PostgreSQL表的主键重置为在填充的表上再次从1开始?
现在它正在产生1000000及以上的数字。我想要全部重置并从1开始,保持我现有的所有数据不变。
答案 0 :(得分:139)
重置序列以使用数字1重新开始的最佳方法是执行以下操作:
ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1
因此,例如对于users
表,它将是:
ALTER SEQUENCE users_id_seq RESTART WITH 1
答案 1 :(得分:28)
自动增量的主键(即数据类型为serial primary key
的列)与sequence相关联。您可以使用setval(<seqname>, <next_value>)
函数为任何序列设置下一个值。请注意,要实际执行该功能,您需要使用SELECT
,如下所示:SELECT setval(<seqname>, <next_value>)
使用序列时自动创建序列的名称为<table>_<column>_seq
答案 2 :(得分:1)
TRUNCATE TABLE table_name RESTART IDENTITY;
答案 3 :(得分:0)
@bluish实际上使用自动递增的主键插入新记录,就像以这种方式明确使用序列一样:
INSERT INTO MyTable (id, col1, ...) VALUES (MySeq.nextval(), val1, ...)
因此,如果您希望第一个id为1,则必须将序列设置为0.但它超出范围,因此您必须使用ALTER SEQUECE语句。 因此,如果在表格菜单中有一个名为number的序列字段,例如:
ALTER SEQUENCE menu_number_seq RESTART
将完美地完成工作。