在 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').