截断表后,序列不会重置

use*_*887 27 postgresql sequence

截断表后,我使用SELECT lastval()来获取错误的序列ID.

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

Igo*_*nko 65

尝试

TRUNCATE TABLE table_name 
RESTART IDENTITY;
Run Code Online (Sandbox Code Playgroud)

它会

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

详情:TRUNCATE


Eri*_*ang 19

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

truncate table table_name restart identity;
Run Code Online (Sandbox Code Playgroud)

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

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

truncate table table_name;
alter sequence seq_name start 1;
Run Code Online (Sandbox Code Playgroud)


jah*_*d31 5

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

ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1
Run Code Online (Sandbox Code Playgroud)

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

ALTER SEQUENCE users_id_seq RESTART WITH 1
Run Code Online (Sandbox Code Playgroud)


5a0*_*01P 5

尝试这个:

TRUNCATE TABLE table_name RESTART IDENTITY CASCADE;


Clo*_*eto 2

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

setval('sequence_name', 0)
Run Code Online (Sandbox Code Playgroud)

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