38

截断表后,我使用 SELECT lastval() 获取错误的序列号。

当我截断表时,我使用 SELECT lastval(),我得到了错误的 ID/

4

6 回答 6

87

使用TRUNCATESQL 命令。

对于单个表,语法如下:

TRUNCATE TABLE table_name RESTART IDENTITY;

对于多个表:

TRUNCATE TABLE table_foo, table_bar RESTART IDENTITY;

它能做什么:

自动重新启动截断表的列所拥有的序列。

详细信息:TRUNCATE @ postgresql.org

于 2012-12-21T12:15:02.780 回答
22

以下是重置序列的标准方法:

truncate table table_name restart identity;

但在某些版本和平台中,这是语法错误,

在这种情况下,您可以在不重置序列的情况下截断,并使用另一个 sql 更改序列,试试这个:

truncate table table_name;
alter sequence seq_name start 1;
于 2014-04-15T17:53:34.730 回答
7

将序列重置为从数字 1 开始的最佳方法是在成功截断序列后执行以下操作:

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

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

ALTER SEQUENCE users_id_seq RESTART WITH 1
于 2017-12-07T15:12:36.627 回答
4

检查下一个

ALTER SEQUENCE sequence_name RESTART WITH 1;
于 2014-09-17T15:58:39.227 回答
3

尝试这个:

TRUNCATE TABLE table_name RESTART IDENTITY CASCADE;

于 2020-01-06T09:15:42.573 回答
2

如果要重置序列,则:

setval('sequence_name', 0)

要列出现有的序列名称\ds,请在 psql 提示符处发出 a。

于 2012-12-21T11:42:23.643 回答