ALTER SEQUENCE — изменение определения генератора последовательности
ALTER SEQUENCE [ IF EXISTS ]name[ ASdata_type] [ INCREMENT [ BY ]increment] [ MINVALUEminvalue| NO MINVALUE ] [ MAXVALUEmaxvalue| NO MAXVALUE ] [ START [ WITH ]start] [ RESTART [ [ WITH ]restart] ] [ CACHEcache] [ [ NO ] CYCLE ] [ OWNED BY {table_name.column_name| NONE } ] ALTER SEQUENCE [ IF EXISTS ]nameSET { LOGGED | UNLOGGED } ALTER SEQUENCE [ IF EXISTS ]nameOWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER SEQUENCE [ IF EXISTS ]nameRENAME TOnew_nameALTER SEQUENCE [ IF EXISTS ]nameSET SCHEMAnew_schema
Команда ALTER SEQUENCE изменяет параметры существующего
генератора последовательности. Любые параметры, не заданные явно в команде
ALTER SEQUENCE, сохраняют свои предыдущие значения.
Чтобы использовать ALTER SEQUENCE, вы должны быть владельцем последовательности.
Чтобы изменить схему последовательности, вы также должны иметь право CREATE
в новой схеме.
Чтобы изменить владельца, вы должны иметь возможность выполнить SET ROLE для
новой роли-владельца, и эта роль должна иметь право CREATE
в схеме последовательности.
(Эти ограничения гарантируют, что изменение владельца не позволит сделать ничего такого,
что нельзя было бы сделать удалением и повторным созданием последовательности.
Однако суперпользователь может изменить владельца любой последовательности в любом случае.)
nameИмя (возможно, с указанием схемы) изменяемой последовательности.
IF EXISTSНе выдавать ошибку, если последовательность не существует. В этом случае выдаётся уведомление.
data_type
Необязательное предложение AS
изменяет тип данных последовательности. Допустимые типы:
data_typesmallint, integer и bigint.
Изменение типа данных автоматически изменяет минимальное и максимальное
значения последовательности тогда и только тогда, когда предыдущие минимальное и максимальное
значения были минимальным или максимальным значением старого типа данных (другими
словами, если последовательность была создана с использованием NO
MINVALUE или NO MAXVALUE, неявно или
явно). В противном случае минимальное и максимальное значения сохраняются,
если только новые значения не заданы в той же команде. Если минимальное
и максимальное значения не помещаются в новый тип данных, будет сгенерирована ошибка.
increment
Предложение INCREMENT BY является
необязательным. Положительное значение создаст возрастающую последовательность,
отрицательное — убывающую. Если не указано, сохраняется старое
значение приращения.
increment
minvalueNO MINVALUE
Необязательное предложение MINVALUE определяет
минимальное значение, которое может генерировать последовательность. Если указано minvalueNO
MINVALUE, будут использоваться значения по умолчанию: 1 и
минимальное значение типа данных для возрастающих и убывающих последовательностей
соответственно. Если ни одна из опций не указана,
сохраняется текущее минимальное значение.
maxvalueNO MAXVALUE
Необязательное предложение MAXVALUE определяет
максимальное значение для последовательности. Если указано maxvalueNO
MAXVALUE, будут использоваться значения по умолчанию:
максимальное значение типа данных и -1 для возрастающих и убывающих
последовательностей соответственно. Если ни одна из опций не указана,
сохраняется текущее максимальное значение.
start
Необязательное предложение START WITH изменяет
записанное начальное значение последовательности. Это не влияет на
текущее значение последовательности; оно просто устанавливает значение,
которое будут использовать будущие команды startALTER SEQUENCE RESTART.
restart
Необязательное предложение RESTART [ WITH изменяет
текущее значение последовательности. Это похоже на вызов функции
restart ]setval с is_called =
false: указанное значение будет возвращено
следующим вызовом nextval.
Написание RESTART без значения restart эквивалентно указанию
начального значения, которое было записано командой CREATE SEQUENCE
или последний раз установлено командой ALTER SEQUENCE START WITH.
В отличие от вызова setval,
операция RESTART над последовательностью является транзакционной
и блокирует параллельные транзакции от получения чисел из той же
последовательности. Если это нежелательный режим работы,
следует использовать setval.
cache
Предложение CACHE позволяет
предварительно выделять числа последовательности и сохранять их в памяти для
более быстрого доступа. Минимальное значение — 1 (только одно значение может быть
сгенерировано за раз, т.е. кэширование отсутствует). Если не указано, сохраняется старое
значение кэша.
cache
CYCLE
Необязательное ключевое слово CYCLE может использоваться для включения
зацикливания последовательности, когда
maxvalue или
minvalue достигнуты
возрастающей или убывающей последовательностью соответственно. Если предел достигнут,
следующим сгенерированным числом будет
minvalue или
maxvalue,
соответственно.
NO CYCLE
Если указано необязательное ключевое слово NO CYCLE,
любые вызовы nextval после того, как
последовательность достигла своего максимального значения, будут возвращать ошибку.
Если ни CYCLE, ни NO
CYCLE не указаны, сохраняется старое поведение зацикливания.
SET { LOGGED | UNLOGGED }Эта форма изменяет последовательность с незалогированной (unlogged) на залогированную (logged) или наоборот (см. CREATE SEQUENCE). Она не может быть применена к временной последовательности.
OWNED BY table_name.column_nameOWNED BY NONE
Опция OWNED BY связывает последовательность с
определённым столбцом таблицы таким образом, что если этот столбец
(или вся таблица) удаляется, последовательность автоматически
удаляется вместе с ним. Если указано, эта ассоциация заменяет любую
ранее указанную ассоциацию для последовательности. Указанная
таблица должна иметь того же владельца и находиться в той же схеме, что и
последовательность.
Указание OWNED BY NONE удаляет любую существующую
ассоциацию, делая последовательность «самостоятельной».
new_ownerИмя пользователя нового владельца последовательности.
new_nameНовое имя для последовательности.
new_schemaНовая схема для последовательности.
Команда ALTER SEQUENCE не сразу повлияет на
результаты nextval в серверных процессах (backend),
отличных от текущего, которые предварительно выделили (закэшировали) значения последовательности.
Они израсходуют все закэшированные значения, прежде чем заметят изменённые
параметры генерации последовательности. На текущий серверный процесс изменения
повлияют немедленно.
Команда ALTER SEQUENCE не влияет на статус currval
для последовательности. (До Digital Q.DataBase
8.3 иногда влияла.)
Команда ALTER SEQUENCE блокирует
параллельные вызовы nextval, currval,
lastval и setval.
По историческим причинам ALTER TABLE также может использоваться с
последовательностями; но единственные варианты ALTER TABLE,
которые допустимы с последовательностями, эквивалентны формам, показанным выше.
Перезапустить последовательность с именем serial с значения 105:
ALTER SEQUENCE serial RESTART WITH 105;
Команда ALTER SEQUENCE соответствует стандарту SQL,
за исключением предложений AS, START WITH,
OWNED BY, OWNER TO, RENAME TO и
SET SCHEMA, которые являются
расширениями Digital Q.DataBase.