将PostgreSQL主键重置为1

将PostgreSQL主键重置为1,postgresql,primary-key,reset,Postgresql,Primary Key,Reset,有没有办法在已填充的表上将PostgreSQL表的主键重新设置为从1开始 现在它正在生成1000000以上的数字。我希望它全部重置并开始为1,保持所有现有数据完整。请参阅此处的更好选项: 自动递增的主键(即数据类型为串行主键的列)与。您可以使用setval(,)函数为任何序列设置下一个值。请注意,要实际执行函数本身,您需要如下所示:选择setval(,) 使用serial are时自动创建序列的名称是\uu seq重置序列以从数字1开始的最佳方法是执行以下操作: ALTER SEQUENCE &

有没有办法在已填充的表上将PostgreSQL表的主键重新设置为从1开始


现在它正在生成1000000以上的数字。我希望它全部重置并开始为1,保持所有现有数据完整。

请参阅此处的更好选项:

自动递增的主键(即数据类型为串行主键的列)与。您可以使用
setval(,)
函数为任何序列设置下一个值。请注意,要实际执行函数本身,您需要如下所示:
选择setval(,)


使用serial are时自动创建序列的名称是
\uu seq

重置序列以从数字1开始的最佳方法是执行以下操作:

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

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

INSERT INTO MyTable (id, col1, ...) VALUES (MySeq.nextval(), val1, ...)
因此,如果希望第一个id为1,则必须将序列设置为0。但这是不允许的,所以必须使用ALTER SEQUECE语句。 因此,如果表菜单中有一个名为number的序列字段,例如:

ALTER SEQUENCE menu_number_seq RESTART

将使工作完美。

您需要在调用前放置“SELECT”,例如,
SELECT setval('table_id_seq',10000)
如果我执行
SELECT setval('table_id_seq',1)
,当我插入新记录时,id的值为2,而不是1。作品(PostgreSQL 9.3)@bluish可能发生的情况是,在分配新的主键之前,序列号会增加,即,您需要将其重置为0。但我同意另一种解决方案更好。带1的
参数是冗余的,可以使用。这是唯一正确的答案,因为它确实重置了序列。CREATE TABLE子句自动生成的索引的最大问题是我们不知道名称(后缀不是
seq
,可以通过
pk
等)但在psql上通过
\d my_table_name
或通过SQL检查,
从pg_索引中选择*,其中的tablename类似于“%my_table_name%”
ALTER SEQUENCE menu_number_seq RESTART