В данном разделе описываются функции, предназначенные для работы с объектами последовательностей, также называемыми генераторами последовательностей или просто последовательностями. Объекты последовательностей представляют собой специальные однострочные таблицы, создаваемые с помощью команды CREATE SEQUENCE. Объекты последовательностей обычно используются для генерации уникальных идентификаторов строк таблицы. Функции последовательностей, перечисленные в Таблица 2.6.53, предоставляют простые и безопасные в условиях многопользовательского доступа методы получения последующих значений из объектов последовательностей.
Таблица 2.6.53. Функции последовательностей
Функция Описание |
|---|
|
Продвигает объект последовательности к следующему значению и возвращает его.
Данная операция выполняется атомарно: даже если несколько сеансов
выполняют
Для данной функции требуется наличие |
Устанавливает текущее значение объекта последовательности и, опционально,
его
SELECT setval('myseq', 42); Следующий вызов
Результат, возвращаемый функцией
Для данной функции требуется наличие |
|
Возвращает значение, которое было получено последним
с помощью
Для данной функции требуется наличие |
|
Возвращает значение, которое последний раз было получено с помощью функции
Для данной функции требуется наличие |
Чтобы избежать блокировки параллельных транзакций, получающих числа из одной и той же последовательности, значение, полученное функцией nextval
не освобождается для повторного использования в случае последующей отмены вызывающей транзакции. Это означает, что аборты транзакций или сбои в работе базы данных могут привести к возникновению пропусков в последовательности генерируемых значений. Подобная ситуация может возникнуть и без прерывания транзакции. Например, оператор INSERT с
предложением ON CONFLICT вычислит подлежащий вставке кортеж, включая выполнение всех необходимых nextval
вызовов перед обнаружением любого конфликта, который привел бы к переходу к ON CONFLICT вместо вставки.
Таким образом, Digital Q.DataBase объекты
последовательностей не могут быть использованы для получения «беспрерывных»
последовательностей.
Аналогичным образом, изменения состояния последовательности, произведенные функцией setval
немедленно становятся видимыми для других транзакций и не отменяются даже в случае отката вызвавшей их транзакции.
Если в работе кластера баз данных происходит сбой до фиксации транзакции, содержащей вызов функции nextval
или setval , изменение состояния последовательности может не быть записано в постоянное хранилище. Вследствие этого после перезапуска кластера состояние последовательности (исходное или обновленное) может оказаться неопределенным. Это не влияет на использование последовательности внутри базы данных, так как прочие результаты незафиксированных транзакций также не будут видны. Однако при необходимости использовать значение последовательности во
внешних по отношению к базе данных приложениях, следует убедиться, что
nextval соответствующий вызов был зафиксирован до начала использования этого значения.
Последовательность, обрабатываемая функцией для работы с последовательностями, определяется с помощью regclass аргументом типа regclass, который представляет собой OID данной последовательности в
pg_class системном каталоге. Тем не менее, ручной поиск значения OID не требуется, так как regclass входной преобразователь типа данных выполнит эти действия автоматически. Подробности см. в Раздел 2.5.19
for details.