В Postgresql порядковые номера начинаются с 1, но фактически возвращают новые записи с идентификатором 2?

С помощью setval('sequence',1) устанавливает начальное значение последовательности равным 1. Но когда вставляется запись, первый номер "последовательности" фактически равен 2.

Как получить фактическую первую запись с порядковым номером 1?

1 ответ

Решение

Из прекрасного руководства:

setval
Сброс значения счетчика объекта последовательности. Двухпараметрическая форма устанавливает последовательность last_value поле к указанному значению и устанавливает его is_called поле к истине, что означает, что следующий 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'),

Другие вопросы по тегам