1

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

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

4

1 回答 1

4

来自精美手册

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下一个值将是2. 您可能需要以下三种参数形式setval

setval('sequence', 1, false)

这样is_called序列上的标志就会是假的,并且nextval('sequence')会是1. 另请注意,绑定到序列的列的默认值为nextval('sequence').

于 2016-12-14T19:43:34.213 回答