ALTER SEQUENCE

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

Обзор

ALTER SEQUENCE [ IF EXISTS ] name [INCREMENT [ BY ] increment] 
     [MINVALUE minvalue | NO MINVALUE] 
     [MAXVALUE maxvalue | NO MAXVALUE] 
     [START [ WITH ] start ]
     [RESTART [ [ WITH ] restart] ]
     [CACHE cache] [[ NO ] CYCLE] 
     [OWNED BY {table.column | NONE}]

ALTER SEQUENCE [ IF EXISTS ] name OWNER TO new_owner

ALTER SEQUENCE [ IF EXISTS ] name RENAME TO new_name

ALTER SEQUENCE [ IF EXISTS ] name SET SCHEMA new_schema

Описание

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

Пользователь должен обладать правами на использование данной последовательности для выполнения команды ALTER SEQUENCE. Чтобы изменить схему последовательности, пользователь также должен иметь привилегию CREATE в новой схеме. Обратите внимание, что суперпользователи автоматически обладают всеми привилегиями.

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

Параметры

name

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

IF EXISTS

  • Если последовательность не существует, ошибка не возникнет, будет выдано только предупреждение.

Increment

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

minvalue
NO MINVALUE

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

maxvalue
NO MAXVALUE

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

start

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

restart

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

new_owner

  • Имя пользователя, который станет новым владельцем последовательности.

cache

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

CYCLE

  • Ключевое слово CYCLE (необязательно) используется для зацикливания последовательности: когда она достигает maxvalue (для возрастающей) или minvalue (для убывающей), следующее значение становится соответствующим minvalue или maxvalue.

NO CYCLE

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

OWNED BY table.column
OWNED BY NONE

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

new_name

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

new_schema

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

Замечания

Чтобы избежать блокировки параллельных транзакций, запрашивающих числа из одной и той же последовательности, изменения параметров генерации последовательности командой ALTER SEQUENCE никогда не откатываются. Эти изменения вступают в силу немедленно и являются необратимыми. Однако предложения OWNED BY, OWNER TO, RENAME TO и SET SCHEMA представляют собой обычные обновления каталога, которые можно откатить.

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

Для обеспечения обратной совместимости команду ALTER TABLE также можно использовать с последовательностями. Однако единственный допустимый вариант ALTER TABLE для последовательностей эквивалентен форме, описанной выше.

Пример

Перезапуск последовательности с именем serial со значения 105:

ALTER SEQUENCE serial RESTART WITH 105;

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

Команда ALTER SEQUENCE соответствует стандарту SQL, за исключением предложений START WITH, OWNED BY, OWNER TO, RENAME TO и SET SCHEMA, которые являются расширениями базы данных YMatrix.

См. также

CREATE SEQUENCE, DROP SEQUENCE