使用setval('sequence',1)
将序列的起始值设置为1.但是当插入记录时,第一个'序列'号实际上是2.
如何让实际的第一条记录的序列号为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')
。