×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.6.17. Функции управления последовательностями

В данном разделе описываются функции, предназначенные для работы с объектами последовательностей, также называемыми генераторами последовательностей или просто последовательностями. Объекты последовательностей представляют собой специальные однострочные таблицы, создаваемые с помощью команды CREATE SEQUENCE. Объекты последовательностей обычно используются для генерации уникальных идентификаторов строк таблицы. Функции последовательностей, перечисленные в Таблица 2.6.53, предоставляют простые и безопасные в условиях многопользовательского доступа методы получения последующих значений из объектов последовательностей.

Таблица 2.6.53. Функции последовательностей

Функция

Описание

nextval ( regclass ) → bigint

Продвигает объект последовательности к следующему значению и возвращает его. Данная операция выполняется атомарно: даже если несколько сеансов выполняют nextval параллельно, каждый из них гарантированно получит уникальное значение последовательности. Если объект последовательности был создан с параметрами по умолчанию, последующие nextval вызовы функции будут возвращать последовательные значения, начиная с 1. Иного поведения можно достичь при использовании соответствующих параметров в CREATE SEQUENCE команде.

Для данной функции требуется наличие USAGE или UPDATE привилегий для работы с последовательностью.

setval ( regclass, bigint [, boolean ] ) → bigint

Устанавливает текущее значение объекта последовательности и, опционально, его is_called флаг. Форма с двумя параметрами устанавливает значение поля last_value последовательности в указанное значение и устанавливает его is_called поле в значение true, что означает, что следующий вызов функции nextval увеличит значение последовательности перед возвратом значения. Значение, возвращаемое функцией с помощью currval также устанавливается равным указанному значению. В форме вызова с тремя параметрами is_called может быть установлено в одно из значений true или false. true имеет тот же результат, что и форма с двумя параметрами. Если установлено значение в false, то следующий вызов функции nextval вернет именно указанное значение, а инкрементирование последовательности начнется при следующем вызове nextval. Кроме того, значение, возвращаемое функцией currval не является в данном случае изменяется. Например,

SELECT setval('myseq', 42);           Следующий вызов nextval вернёт значение 43
SELECT setval('myseq', 42, true);     Аналогично указанному выше
SELECT setval('myseq', 42, false);    Следующий вызов nextval вернёт значение 42

Результат, возвращаемый функцией setval является значением её второго аргумента.

Для данной функции требуется наличие UPDATE права доступа к последовательности.

currval ( regclass ) → bigint

Возвращает значение, которое было получено последним с помощью nextval для данной последовательности в текущем сеансе. (Если функция nextval ранее не вызывалась для данной последовательности в текущем сеансе, возникнет ошибка.) Поскольку это возвращая локальное для текущего сеанса значение, она предоставляет предсказуемый результат независимо от того, выполняли ли другие сеансы операции nextval после того как их выполнил текущий сеанс.

Для данной функции требуется наличие USAGE или SELECT привилегий для работы с последовательностью.

lastval () → bigint

Возвращает значение, которое последний раз было получено с помощью функции nextval в текущем сеансе. Данная функция идентична функции currval, за исключением того, что вместо принятия имени последовательности в качестве аргумента она обращается к той последовательности nextval с которой в последний раз работала функция в текущем сеансе. Вызов функции lastval приводит к ошибке, если функция nextval еще не вызывалась в рамках текущего сеанса.

Для данной функции требуется наличие USAGE или SELECT права доступа на последнюю использованную последовательность.


Внимание

Чтобы избежать блокировки параллельных транзакций, получающих числа из одной и той же последовательности, значение, полученное функцией 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.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению