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

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

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

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

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

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

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

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

6.1.79. CREATE SEQUENCE

6.1.79. CREATE SEQUENCE

CREATE SEQUENCE — создание нового генератора последовательностей

Синтаксис

CREATE [ { TEMPORARY | TEMP } | UNLOGGED ] SEQUENCE [ IF NOT EXISTS ] name
    [ AS data_type ]
    [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]
    [ OWNED BY { table_name.column_name | NONE } ]

Описание

CREATE SEQUENCE создает новый генератор последовательных чисел. Это включает в себя создание и инициализацию новой специальной однострочной таблицы с именем name. Владельцем генератора становится пользователь, выполнивший команду.

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

После того как последовательность создана, для управления ею используются функции nextval, currval, и setval to operate on the sequence. Эти функции описаны в Раздел 2.6.17.

Хотя обновлять последовательность напрямую нельзя, можно использовать запрос вида:

SELECT * FROM имя;

для ознакомления с параметрами и текущим состоянием последовательности. В частности, поле last_value последовательности содержит последнее значение, выделенное какой-либо сессией. (Разумеется, это значение может устареть к моменту вывода, если в других сессиях активно выполняются nextval вызовы.)

Параметры

TEMPORARY или TEMP

Если указано, объект последовательности создается только для текущей сессии и автоматически удаляется при ее завершении. Существующие постоянные последовательности с тем же именем не видны (в данной сессии), пока существует временная последовательность, если только к ним не обращаются по полному имени (с указанием схемы).

UNLOGGED

Если указано, создается нежурналируемая последовательность. Изменения в нежурналируемых последовательностях не записываются в журнал предзаписи (WAL). Они не обладают свойством отказоустойчивости: нежурналируемая последовательность автоматически сбрасывается в начальное состояние после сбоя или нештатного завершения работы. Нежурналируемые последовательности также не реплицируются на резервные серверы.

В отличие от нежурналируемых таблиц, нежурналируемые последовательности не обеспечивают значительного преимущества в производительности. Этот параметр в основном предназначен для последовательностей, связанных с нежурналируемыми таблицами через столбцы идентичности (identity) или серийные столбцы (serial). В таких случаях обычно не имеет смысла записывать данные последовательности в журнал предварительной записи (WAL) и реплицировать их, если связанная таблица не журналируется.

IF NOT EXISTS

Не выдавать ошибку, если отношение с тем же именем уже существует. В этом случае выводится уведомление. Обратите внимание: нет никакой гарантии, что существующее отношение аналогично той последовательности, которая была бы создана — оно может даже не быть последовательностью.

name

Имя (необязательно со схемой) создаваемой последовательности.

data_type

Необязательное предложение AS data_type задает тип данных последовательности. Допустимыми типами являются smallint, integer, и bigint. bigint является значением по умолчанию. Тип данных определяет минимальное и максимальное значения последовательности по умолчанию.

increment

Необязательное предложение INCREMENT BY increment указывает, какое значение прибавляется к текущему значению последовательности для получения нового значения. Положительное значение создает возрастающую последовательность, отрицательное — убывающую последовательность. Значение по умолчанию — 1.

minvalue
NO MINVALUE

Необязательное предложение MINVALUE minvalue определяет минимальное значение, которое может генерировать последовательность. Если это предложение не указано или NO MINVALUE указано, то будут использованы значения по умолчанию. Для возрастающей последовательности значением по умолчанию является 1. Для убывающей последовательности значением по умолчанию является минимальное значение типа данных.

maxvalue
NO MAXVALUE

Необязательное предложение MAXVALUE maxvalue определяет максимальное значение последовательности. Если это предложение не указано или NO MAXVALUE указано, то будут использоваться значения по умолчанию. Значением по умолчанию для возрастающей последовательности является максимальное значение соответствующего типа данных. Значением по умолчанию для убывающей последовательности является -1.

start

Необязательное предложение START WITH start позволяет последовательности начинаться с любого значения. Начальным значением по умолчанию является minvalue для возрастающих последовательностей и maxvalue для убывающих.

cache

Необязательное предложение CACHE cache определяет, какое количество значений последовательности должно быть предварительно выделено и сохранено в памяти для ускорения доступа. Минимальное значение равно 1 (одновременно может быть сгенерировано только одно значение, т. е. кэширование отсутствует); оно же является значением по умолчанию.

CYCLE
NO CYCLE

Параметр CYCLE позволяет последовательности возобновляться по циклу при достижении maxvalue или minvalue в возрастающей или убывающей последовательности соответственно. При достижении предела следующим сгенерированным числом будет minvalue или maxvalueсоответственно.

Если NO CYCLE указано, любые вызовы nextval после достижения последовательностью максимального значения будут возвращать ошибку. Если ни CYCLE или NO CYCLE не указаны, NO CYCLE используется по умолчанию.

OWNED BY table_name.column_name
OWNED BY NONE

Параметр OWNED BY опция связывает последовательность с конкретным столбцом таблицы; таким образом, при удалении этого столбца (или всей таблицы) последовательность также будет удалена автоматически. Указанная таблица должна иметь того же владельца и находиться в той же схеме, что и последовательность. OWNED BY NONE(значение по умолчанию) указывает на отсутствие такой связи.

Примечания

Используйте DROP SEQUENCE для удаления последовательности.

Последовательности основаны на bigint арифметике, поэтому диапазон не может выходить за пределы восьмибайтового целого числа (от -9223372036854775808 до 9223372036854775807).

Поскольку nextval и setval вызовы никогда не откатываются, объекты последовательностей не могут быть использованы, если «беспропускное» назначение номеров последовательности требуется. Реализовать назначение без пропусков можно с помощью исключительной блокировки таблицы, содержащей счетчик; но это решение обходится гораздо дороже, чем объекты последовательностей, особенно если многим транзакциям требуются номера последовательности одновременно.

Неожиданные результаты могут быть получены, если cache значение параметра больше единицы используется для объекта последовательности, который будет использоваться одновременно несколькими сессиями. Каждая сессия будет выделять и кэшировать последовательные значения последовательности при одном обращении к объекту последовательности и увеличивать last_value соответствующим образом. Затем следующие cache-1 вызовов nextval в рамках этой сессии просто возвращают предварительно выделенные значения без обращения к объекту последовательности. Таким образом, любые номера, выделенные, но не использованные в рамках сессии, будут потеряны при завершении этой сессии, что приведет к «пропуски» в последовательности.

Более того, хотя гарантируется, что несколько сеансов выделяют различные значения последовательности, эти значения могут быть сгенерированы не по порядку, если рассматривать все сеансы в совокупности. Например, при cache значении 10 сеанс A может зарезервировать значения 1..10 и вернуть nextval=1, затем сеанс B может зарезервировать значения 11..20 и вернуть nextval=11 до того, как сеанс A сгенерирует nextval=2. Таким образом, при cache значении, равном единице, можно с уверенностью предположить, что nextval значения генерируются последовательно; при cache значении больше единицы следует лишь полагать, что nextval все значения различны, но не то, что они генерируются строго последовательно. Кроме того, last_value будет отражать последнее значение, зарезервированное любым сеансом, независимо от того, было ли оно уже возвращено функцией nextval.

Другим важным моментом является то, что setval выполненная над такой последовательностью, не будет заметна другим сеансам до тех пор, пока они не израсходуют все предварительно выделенные значения в своих кэшах.

Примеры

Создание возрастающей последовательности с именем serial, начинающейся со 101:

CREATE SEQUENCE serial START 101;

Выбор следующего значения из этой последовательности:

SELECT nextval('serial');

 nextval
---------
     101

Выбор следующего значения из этой последовательности:

SELECT nextval('serial');

 nextval
---------
     102

Использование данной последовательности в команде INSERT command:

INSERT INTO distributors VALUES (nextval('serial'), 'nothing');

Обновление значения последовательности после выполнения COPY FROM:

BEGIN;
COPY distributors FROM 'input_file';
SELECT setval('serial', max(id)) FROM distributors;
END;

Совместимость

CREATE SEQUENCE соответствует стандарту SQL со следующими исключениями:

  • Для получения следующего значения используется функция nextval() вместо стандартного выражения NEXT VALUE FOR expression.

  • Параметр OWNED BY предложение является расширением Digital Q.DataBase extension.

См. также

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

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