当我从Postgresql表中删除所有记录,然后尝试将序列重置为插入新记录时的编号1时,结果会有所不同:
SELECT setval('tblname_id_seq', (SELECT COALESCE(MAX(id),1) FROM tblname));
这将当前序列的值设置为1,但是下一个记录(因为还没有任何记录,所以实际上是第一个记录)将获得数字2!
我不能将它设置为0,因为序列中的最小值是1!
当我使用:
ALTER SEQUENCE tblname_id_seq RESTART WITH 1;
实际上插入的第一条记录获得编号1!但是上述代码不接受SELECT作为值,而不是1。
当没有记录时,我希望将序列重置为1号,第一条记录应该从1开始。但是当表中已经有记录时,我想重置序列,以便插入的下一条记录将获得{ highest } + 1。
有人有清晰的解决方案吗?
COALESCE(MAX(id),0)+1
。 - Stephen Denne