在 Postgresql 中,序列号设置为从 1 开始,但实际上返回的是 ID 为 2 的新记录?
In Postgresql, Sequence numbers set to start at 1, but is actually returning new records with id of 2?
使用setval('sequence',1)
将序列的起始值设置为1。但是当插入记录时,第一个'sequence'数字实际上是2。
如何让实际的第一条记录的序号为 1?
来自fine manual:
setval
Reset the sequence object's counter value. The two-parameter form sets the sequence's last_value
field to the specified value and sets its is_called
field to true, meaning that the next nextval
will advance the sequence before returning a value. [...]
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
,而 下一个 的值将是 2
。您可能需要 setval
:
的三个参数形式
setval('sequence', 1, false)
因此序列上的 is_called
标志将为 false,而 nextval('sequence')
将为 1
。另请注意,绑定到序列的列的默认值为 nextval('sequence')
.
使用setval('sequence',1)
将序列的起始值设置为1。但是当插入记录时,第一个'sequence'数字实际上是2。
如何让实际的第一条记录的序号为 1?
来自fine manual:
setval
Reset the sequence object's counter value. The two-parameter form sets the sequence'slast_value
field to the specified value and sets itsis_called
field to true, meaning that the nextnextval
will advance the sequence before returning a value. [...]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
,而 下一个 的值将是 2
。您可能需要 setval
:
setval('sequence', 1, false)
因此序列上的 is_called
标志将为 false,而 nextval('sequence')
将为 1
。另请注意,绑定到序列的列的默认值为 nextval('sequence')
.