将PostgreSQL主键重置为1

dm7nw8vv  于 2022-12-23  发布在  PostgreSQL
关注(0)|答案(6)|浏览(334)

有没有办法重新设置PostgreSQL表的主键,使其在填充的表上再次从1开始?
现在它正在生成1000000以上的数字。我希望它全部重置并从1开始,保持所有现有数据的完整性。

mftmpeh8

mftmpeh81#

将序列重置为从编号1开始的最佳方法是执行以下操作:

ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1

例如,对于users表,它将是:

ALTER SEQUENCE users_id_seq RESTART WITH 1
abithluo

abithluo2#

在此查看更好的选项:https://stackoverflow.com/a/5272164/5190
自动递增的主键(即数据类型为serial primary key的列)与sequence相关联。您可以使用setval(<seqname>, <next_value>)函数为任何序列设置下一个值。请注意,要实际执行函数本身,您需要使用SELECT,如下所示:SELECT setval(<seqname>, <next_value>)
使用序列时自动创建的序列名称为<table>_<column>_seq

dgtucam1

dgtucam13#

TRUNCATE TABLE表格名称重新启动标识;
这将删除你所有的数据。也许有些用户像我一样在寻找这样的东西。

wdebmtf2

wdebmtf24#

@bluish实际上是使用自动递增的主键插入一条新记录,就像这样显式地使用序列:

INSERT INTO MyTable (id, col1, ...) VALUES (MySeq.nextval(), val1, ...)

因此,如果希望第一个id为1,则必须将序列设置为0。但这超出了范围,因此必须使用ALTER SEQUECE语句。因此,如果在表菜单中有一个名为number的序列字段,例如:

ALTER SEQUENCE menu_number_seq RESTART

能完美地完成任务。

57hvy0tb

57hvy0tb5#

首先清空表,然后重置主键。
让我们假设您有表人口
第一个月
ALTER SEQUENCE population_id_seq" RESTART WITH 1

vc9ivgsu

vc9ivgsu6#

@ZootHii截断表table_name重启标识级联;

相关问题