有没有办法重新设置PostgreSQL表的主键,使其在填充的表上再次从1开始?现在它正在生成1000000以上的数字。我希望它全部重置并从1开始,保持所有现有数据的完整性。
mftmpeh81#
将序列重置为从编号1开始的最佳方法是执行以下操作:
ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1
例如,对于users表,它将是:
users
ALTER SEQUENCE users_id_seq RESTART WITH 1
abithluo2#
在此查看更好的选项:https://stackoverflow.com/a/5272164/5190自动递增的主键(即数据类型为serial primary key的列)与sequence相关联。您可以使用setval(<seqname>, <next_value>)函数为任何序列设置下一个值。请注意,要实际执行函数本身,您需要使用SELECT,如下所示:SELECT setval(<seqname>, <next_value>)使用序列时自动创建的序列名称为<table>_<column>_seq
serial primary key
setval(<seqname>, <next_value>)
SELECT
SELECT setval(<seqname>, <next_value>)
<table>_<column>_seq
dgtucam13#
TRUNCATE TABLE表格名称重新启动标识;这将删除你所有的数据。也许有些用户像我一样在寻找这样的东西。
wdebmtf24#
@bluish实际上是使用自动递增的主键插入一条新记录,就像这样显式地使用序列:
INSERT INTO MyTable (id, col1, ...) VALUES (MySeq.nextval(), val1, ...)
因此,如果希望第一个id为1,则必须将序列设置为0。但这超出了范围,因此必须使用ALTER SEQUECE语句。因此,如果在表菜单中有一个名为number的序列字段,例如:
ALTER SEQUENCE menu_number_seq RESTART
能完美地完成任务。
57hvy0tb5#
首先清空表,然后重置主键。让我们假设您有表人口。第一个月ALTER SEQUENCE population_id_seq" RESTART WITH 1
ALTER SEQUENCE population_id_seq" RESTART WITH 1
vc9ivgsu6#
@ZootHii截断表table_name重启标识级联;
6条答案
按热度按时间mftmpeh81#
将序列重置为从编号1开始的最佳方法是执行以下操作:
例如,对于
users
表,它将是:abithluo2#
在此查看更好的选项:https://stackoverflow.com/a/5272164/5190
自动递增的主键(即数据类型为
serial primary key
的列)与sequence相关联。您可以使用setval(<seqname>, <next_value>)
函数为任何序列设置下一个值。请注意,要实际执行函数本身,您需要使用SELECT
,如下所示:SELECT setval(<seqname>, <next_value>)
使用序列时自动创建的序列名称为
<table>_<column>_seq
dgtucam13#
TRUNCATE TABLE表格名称重新启动标识;
这将删除你所有的数据。也许有些用户像我一样在寻找这样的东西。
wdebmtf24#
@bluish实际上是使用自动递增的主键插入一条新记录,就像这样显式地使用序列:
因此,如果希望第一个id为1,则必须将序列设置为0。但这超出了范围,因此必须使用ALTER SEQUECE语句。因此,如果在表菜单中有一个名为number的序列字段,例如:
能完美地完成任务。
57hvy0tb5#
首先清空表,然后重置主键。
让我们假设您有表人口。
第一个月
ALTER SEQUENCE population_id_seq" RESTART WITH 1
vc9ivgsu6#
@ZootHii截断表table_name重启标识级联;