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
使用三参数形式setval将is_called标志设置为false,以便它返回下一次nextval调用的序列的当前值,而不是立即生成新的.
http://www.postgresql.org/docs/current/interactive/functions-sequence.html
另请注意,您需要使用COALESCE(MAX(id),0)+1,否则序列中的第一个值将是MAX(id)您已知存在的值.(thx Stephen Denne)
| 归档时间: |
|
| 查看次数: |
6526 次 |
| 最近记录: |