在Postgresql中,序列号设置为从1开始,但实际上是返回id为2的新记录?

时间:2016-12-14 19:22:17

标签: postgresql sequence-sql

使用setval('sequence',1)将序列的起始值设置为1.但是当插入记录时,第一个'序列'号实际上是2.

如何让实际的第一条记录的序列号为1?

1 个答案:

答案 0 :(得分:4)

来自fine manual

  

setval
  重置序列对象的计数器值。双参数表单将序列的last_value字段设置为指定值,并将其is_called字段设置为true,这意味着下一个nextval将在返回之前推进序列值。 [...]

SELECT setval('foo', 42);           Next nextval will return 43
SELECT setval('foo', 42, true);     Same as above
SELECT setval('foo', 42, false);    Next nextval will return 42

因此,调用setval('sequence', 1)会将序列的当前值设置为1,而 next 值将设置为2。您可能需要setval的三个参数形式:

setval('sequence', 1, false)

以便序列上的is_called标记为false,nextval('sequence')1。另请注意,绑定到序列的列的默认值为nextval('sequence')