重置序列值为1

10 浏览
0 Comments

重置序列值为1

在执行TRUNCATE表后,我需要重置序列,因此我执行以下操作:

SELECT setval('mytable_id_seq', 1)

然而,当在表中插入行时,序列从2开始,而不是1

如何重置序列值,使新的第一个值为1

 SELECT setval('mytable_id_seq', 0) // 出现超出范围的错误

0
0 Comments

问题:Reset sequence value as 1

原因:使用setval()函数的第三个参数将序列的当前值重置为1或使用alter sequence命令重启序列。

解决方法1:使用setval()函数的第三个参数:

setval(yourseq, 1, false)

解决方法2:使用alter sequence命令重启序列:

alter sequence yourseq restart

0
0 Comments

问题出现的原因是由于序列的起始值被重置为0,而实际上序列的最小值被设置为了1。解决方法有两种:一种是使用setval()函数将序列的值重置为1,另一种是使用truncate命令在重置序列的同时清空表中的数据。需要注意的是,setval()函数在接受参数时会拒绝值为0的情况,因此应该使用setval(seq, 1, false)来将序列标记为未使用。另外,restart identity是最佳的选择,它会修改序列的定义,但这并非必要的副作用。setval()函数的第三个参数或TRUNCATE命令的RESTART IDENTITY选项是解决该问题的最佳方法。如果使用了CASCADE语法,可以使用truncate mytable restart identity CASCADE;来同时重置序列和清空相关表的数据。

0