ALTER SEQUENCE

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


Синтаксис

ALTER SEQUENCE [ IF EXISTS ] имя
    [ AS тип_данных ]
    [ INCREMENT [ BY ] шаг ]
    [ MINVALUE мин_значение | NO MINVALUE ] [ MAXVALUE макс_значение | NO MAXVALUE ]
    [ START [ WITH ] начало ]
    [ RESTART [ [ WITH ] перезапуск ] ]
    [ CACHE кэш ] [ [ NO ] CYCLE ]
    [ OWNED BY { имя_таблицы.имя_столбца | NONE } ]
ALTER SEQUENCE [ IF EXISTS ] имя OWNER TO { новый_владелец | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER SEQUENCE [ IF EXISTS ] имя RENAME TO новое_имя
ALTER SEQUENCE [ IF EXISTS ] имя SET SCHEMA новая_схема

Описание

Команда ALTER SEQUENCE изменяет параметры существующего генератора последовательности. Все параметры, не заданные в ALTER SEQUENCE, сохраняют свои предыдущие установки.

Чтобы использовать команду ALTER SEQUENCE, нужно быть владельцем соответствующей последовательности. Чтобы изменить схему последовательности, необходимо помимо этого иметь право CREATE в новой схеме. Для смены владельца текущий пользователь также должен быть непосредственным или опосредованным членом новой роли-владельца, и эта роль должна иметь право CREATE в схеме последовательности. (Эти ограничения направлены на то, чтобы при смене владельца не происходило ничего, что нельзя было бы сделать путем удаления и повторного создания последовательности. Однако суперпользователь все равно может сменить владельца любой последовательности.)


Параметры

имя

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

IF EXISTS

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

тип_данных

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

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

шаг

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

мин_значение
NO MINVALUE

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

макс_значение
NO MAXVALUE

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

начало

Необязательное предложение START WITH начало меняет записанное начальное значение последовательности. Это не влияет на текущее значение последовательности; оно просто задает значение, которое будут использовать будущие команды ALTER SEQUENCE RESTART.

перезапуск

Необязательное предложение RESTART [ WITH перезапуск ] меняет текущее значение последовательности. Это похоже на вызов функции setval с параметром is_called = false: указанное значение будет возвращено при следующем вызове функции nextval. Указание RESTART без значения перезапуска равнозначно установке начального значения, которое было записано при выполнении CREATE SEQUENCE или установлено последним при выполнении ALTER SEQUENCE START WITH.

В отличие от вызова функции setval, операция RESTART над последовательностью является транзакционной и блокирует параллельным транзакциям возможность получать числа из той же последовательности. Если этот режим работы не устраивает, следует воспользоваться функцией setval.

кэш

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

CYCLE

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

NO CYCLE

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

OWNED BY имя_таблицы.имя_столбца
OWNED BY NONE

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

новый_владелец

Имя пользователя нового владельца последовательности.

новое_имя

Новое имя последовательности.

новая_схема

Новая схема последовательности.


Примечания

Команда ALTER SEQUENCE не сразу повлияет на результаты, возвращаемые nextval в обслуживающих процессах, отличных от текущего, которые могли предварительно сгенерировать (кэшировать) значения последовательности. Эти процессы заметят изменение параметров генерации последовательности только после того, как израсходуют все кэшированные значения. Текущий обслуживающий процесс отреагирует на изменения немедленно.

ALTER SEQUENCE не влияет на статус currval для последовательности.

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, которые являются расширениями QHB.


См. также

CREATE SEQUENCE, DROP SEQUENCE