Postgresql序列

Dyl*_*lan 6 postgresql sequence reset

当我删除Postgresql表中的所有记录,然后尝试重置序列以在插入时启动编号为1的新记录时,我得到不同的结果:

SELECT setval('tblname_id_seq', (SELECT COALESCE(MAX(id),1) FROM tblname));
Run Code Online (Sandbox Code Playgroud)

这会将序列的当前值设置为1,但是NEXT记录(实际上是第一个,因为还没有记录)得到数字2!

并且我无法将其设置为0,因为序列中的最小值为1!

我用的时候:

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

插入的第一条记录实际上是1号!但是上面的代码不接受SELECT作为值而不是1.

我希望在没有记录的情况下将序列重置为数字1,然后第一个记录应该从1开始.但是当表中已有记录时,我想重置序列,以便插入的下一条记录将获得{最高} +1

有没有人有明确的解决方案?

ara*_*nid 10

使用三参数形式setvalis_called标志设置为false,以便它返回下一次nextval调用的序列的当前值,而不是立即生成新的.

http://www.postgresql.org/docs/current/interactive/functions-sequence.html

另请注意,您需要使用COALESCE(MAX(id),0)+1,否则序列中的第一个值将是MAX(id)您已知存在的值.(thx Stephen Denne)

  • 并使用`COALESCE(MAX(id),0)+ 1` (2认同)