Postgres: `last_value` разъяснение - PullRequest
0 голосов
/ 06 января 2020

Я сейчас исправляю неправильную миграцию postgresql и только что сбросил pg_sequence для нескольких моих таблиц. Просто чтобы уточнить:

Предполагается ли last_value равным последнему наивысшему PK для данной таблицы? Или last_value должно быть highest value + 1? Причина, по которой я спрашиваю, состоит в том, что я вижу несколько, которые эквивалентны максимальному PK, и несколько, которые несколько выше.

Я знаю, что это кажется странным вопросом - "почему бы last_value не было последним использованным значением", но я просто хотел уточнить, чтобы убрать любую двусмысленность, что last_value является not in fact the last pk+1, но equal to the last pk

1 Ответ

1 голос
/ 06 января 2020

С документация pg_sequences :

last_value: последнее значение последовательности, записанное на диск. Если используется кэширование, это значение может быть больше, чем последнее значение, переданное из последовательности. Null если последовательность еще не была прочитана. Кроме того, если текущий пользователь не имеет привилегии USAGE или SELECT для последовательности, значение равно нулю.

Ваш вопрос:

Есть last_value предполагается равным последнему по величине ПК для данной таблицы?

Если кэширование не используется, то last_value дает вам самое высокое значение pk. Если используется кэширование, вы можете получить значение, немного превышающее максимальный pk в таблице.

...