Последовательности во многом похожи на обычные таблицы: они находятся в каталоге pg_class
и имеют файл данных, в котором хранится текущее значение.
В последних версиях PostgreSQL (в качестве побочного эффекта от создания ALTER SEQUENCE
полностью транзакционного) вам также нужно SELECT
из последовательности, чтобы увидеть ее текущее значение.
Постоянство обрабатывается транзакционно, как в обычной таблице (даже если nextval
равно , а не транзакционно), поэтому изменения проходят через журнал транзакций, но в отличие от обычных таблиц мультиверсионность отсутствует. Скорее, единственная строка последовательности изменяется на «место». Это нормально, потому что нам не нужны разные версии для значения, и VACUUM
никогда не сможет поспеть за очисткой в занятой последовательности.
Чтобы ответить на ваши вопросы индивидуально:
Во время восстановления изменения последовательности воспроизводятся из WAL, как и любые другие изменения данных.
Использование последовательности имеет очень мало накладных расходов. Модификации не будут вызывать ввод / вывод все время, потому что последовательности кэшируются в общих буферах, как и все другие таблицы. Только на контрольно-пропускных пунктах они должны сохраняться в хранилище, и необходимо учитывать небольшое количество WAL.
Если вы хотите еще больше сократить накладные расходы на использование последовательностей, определите их с CACHE
больше единицы.
Нет проблем с использованием последовательностей. Это лучший способ генерировать уникальные номера.