将 PostgreSQL 主键重置为 1

发布于 2024-09-25 07:54:06 字数 106 浏览 8 评论 0原文

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

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

Is there a way to reset the primary key of a PostgreSQL table to start at 1 again on a populated table?

Right now it's generating numbers from 1000000 and up. I want it all to reset and start to 1, keeping all my existing data intact.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

林空鹿饮溪 2024-10-02 07:54:06

将序列重置为从数字 1 开始的最佳方法是执行以下命令:

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

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

ALTER SEQUENCE users_id_seq RESTART WITH 1

The best way to reset a sequence to start back with number 1 is to execute the following:

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

So, for example for the users table it would be:

ALTER SEQUENCE users_id_seq RESTART WITH 1
作妖 2024-10-02 07:54:06

在此处查看更好的选项:https://stackoverflow.com/a/5272164/5190

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

使用串行时自动创建的序列名称为 ; _<列>_seq

See a better option here: https://stackoverflow.com/a/5272164/5190

Primary keys that autoincrement (i.e., columns with data type serial primary key) are associated with a sequence. You can set the next value for any sequence using the setval(<seqname>, <next_value>) function. Note that to actually execute the function by itself you need to use SELECT, like this: SELECT setval(<seqname>, <next_value>)

The name of the auto created sequences when using serial are <table>_<column>_seq

自在安然 2024-10-02 07:54:06

TRUNCATE TABLE table_name RESTART IDENTITY;

这将删除您的所有数据。

也许有些用户像我一样正在寻找类似的东西。

TRUNCATE TABLE table_name RESTART IDENTITY;

This will delete all of your data.

Maybe some users looking for something like this as I am.

饭团 2024-10-02 07:54:06

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

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

因此,如果您希望第一个id为1,则应该将序列设置为0。但它已经出来了边界,因此您必须使用 ALTER SEQUECE 语句。
因此,如果您的表格菜单中有一个名为 number 的序列字段,例如:

ALTER SEQUENCE menu_number_seq RESTART

将使工作完美完成。

@bluish actually inserting a new record using an auto-incremented primary key, is just like using a sequence explicitly this way:

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

So, if you want the first id to be 1, you should have to set your sequence to 0. But it's out of bounds, so you must use the ALTER SEQUECE statement.
So, if you have a serial field named number in your table menu, for exemple:

ALTER SEQUENCE menu_number_seq RESTART

will make the job perfectly.

著墨染雨君画夕 2024-10-02 07:54:06

首先,清空表,然后重置主键。

假设您拥有的表人口

从总体中删除

ALTER SEQUENCE Population_id_seq" RESTART WITH 1

Firstly, empty the table then reset the primary key.

let suppose table population you have.

delete from population

ALTER SEQUENCE population_id_seq" RESTART WITH 1

篱下浅笙歌 2024-10-02 07:54:06

@ZootHii
TRUNCATE TABLE 表名 RESTART IDENTITY CASCADE;

@ZootHii
TRUNCATE TABLE table_name RESTART IDENTITY CASCADE;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文