【发布时间】:2012-12-21 11:24:12
【问题描述】:
我在截断表后使用 SELECT lastval() 获取错误的序列号。
当我截断表时,我使用 SELECT lastval(),我得到了错误的 ID/
【问题讨论】:
标签: postgresql sequence
我在截断表后使用 SELECT lastval() 获取错误的序列号。
当我截断表时,我使用 SELECT lastval(),我得到了错误的 ID/
【问题讨论】:
标签: postgresql sequence
使用TRUNCATE SQL 命令。
对于单个表,语法如下:
TRUNCATE TABLE table_name RESTART IDENTITY;
对于多个表:
TRUNCATE TABLE table_foo, table_bar RESTART IDENTITY;
它的作用:
自动重新启动截断表的列所拥有的序列。
【讨论】:
TRUNCATE TABLE my_table RESTART IDENTITY;
重置序列以从数字 1 开始的最佳方法是在成功截断序列后执行以下操作:
ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1
因此,例如对于 users 表,它将是:
ALTER SEQUENCE users_id_seq RESTART WITH 1
【讨论】:
以下是重置序列的标准方法:
truncate table table_name restart identity;
但在某些版本和平台中,这是语法错误,
在这种情况下,你可以在不重置序列的情况下截断,并用另一个 sql 改变序列,试试这个:
truncate table table_name;
alter sequence seq_name start 1;
【讨论】:
试试这个:
TRUNCATE TABLE table_name RESTART IDENTITY CASCADE;
【讨论】:
检查下一个
ALTER SEQUENCE sequence_name RESTART WITH 1;
【讨论】:
如果你想重置序列,那么:
setval('sequence_name', 0)
要列出现有的序列名称,请在 psql 提示符处发出 \ds。
【讨论】: