将PostgreSQL主键重置为1

时间:2010-09-29 06:36:46

标签: postgresql primary-key reset

有没有办法将PostgreSQL表的主键重置为在填充的表上再次从1开始?

现在它正在产生1000000及以上的数字。我想要全部重置并从1开始,保持我现有的所有数据不变。

4 个答案:

答案 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

将完美地完成工作。