截断表后,序列不会重置

时间:2012-12-21 11:24:12

标签: postgresql sequence

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

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

5 个答案:

答案 0 :(得分:63)

尝试

TRUNCATE TABLE table_name 
RESTART IDENTITY;

它会

  

自动重启截断列所拥有的序列   表(一个或多个)。

详细信息:TRUNCATE

答案 1 :(得分:19)

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

truncate table table_name restart identity;

但在某些版本中&平台,它的语法错误,

在这种情况下,你可以截断没有重置序列,并用另一个sql改变序列,试试这个:

truncate table table_name;
alter sequence seq_name start 1;

答案 2 :(得分:3)

检查下一个

ALTER SEQUENCE sequence_name RESTART WITH 1;

答案 3 :(得分:2)

如果您想重置序列,那么:

setval('sequence_name', 0)

列出现有的序列名称,在psql提示符下发出\ds

答案 4 :(得分:2)

重置序列以使用数字1重新开始的最佳方法是在成功截断它后执行以下命令:

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

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

ALTER SEQUENCE users_id_seq RESTART WITH 1