ALTER SEQUENCE
Эта страница переведена при помощи нейросети GigaChat.
ALTER SEQUENCE — изменение определения генератора последовательности.
Синтаксис
ALTER SEQUENCE [ IF EXISTS ] name
[ AS data_type ]
[ INCREMENT [ BY ] increment ]
[ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
[ [ NO ] CYCLE ]
[ START [ WITH ] start ]
[ RESTART [ [ WITH ] restart ] ]
[ CACHE cache ]
[ OWNED BY { table_name.column_name | NONE } ]
ALTER SEQUENCE [ IF EXISTS ] name SET { LOGGED | UNLOGGED }
ALTER SEQUENCE [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER SEQUENCE [ IF EXISTS ] name RENAME TO new_name
ALTER SEQUENCE [ IF EXISTS ] name SET SCHEMA new_schema
Описание
ALTER SEQUENCE изменяет параметры существующего генератора последовательностей. Все параметры, не указанные в команде, сохраняют свои текущие значения.
Чтобы выполнить эту команду, необходимо быть владельцем последовательности. Для перемещения последовательности в другую схему нужно обладать привилегией CREATE в этой схеме. Для изменения владельца необходимо иметь возможность выполнить команду SET ROLE к новой роли-владельцу, а эта роль должна обладать привилегией CREATE на схему последовательности. Эти требования обеспечивают, что смена владельца не предоставляет дополнительных возможностей, которых нельзя было бы достичь удалением и повторным созданием последовательности. Исключение составляют суперпользователи, которые могут изменять владельца любой последовательности без ограничений.
Параметры
name
Указывает имя последовательности, при необходимости дополненное схемой, которая должна быть изменена.
IF EXISTS
Подавляет ошибку, если указанная последовательность не существует, вместо этого выводится уведомление.
AS data_type
Изменяет тип данных последовательности (опциональный параметр). Допустимые типы: smallint, integer, bigint.
При смене типа данных минимальные и максимальные значения автоматически меняются под новый тип, только если ранее они были равны предельным значениям старого типа (NO MINVALUE / NO MAXVALUE). В остальных случаях значения сохраняются, если не указаны новые. Несовпадение диапазонов вызывает ошибку.
INCREMENT BY increment
Задает шаг изменения значения (опциональный параметр). Положительное — возрастающая последовательность, отрицательное — убывающая. Если не указан, сохраняется прежнее значение.
MINVALUE minvalueNO MINVALUE
Указывает минимальное значение, которое может выдать последовательность (задается опционально). NO MINVALUE — используется значение по умолчанию (1 для возрастающей, минимально возможное значение для убывающей). Если ни один из вариантов не указан, текущее минимальное значение будет сохранено.
MAXVALUE maxvalueNO MAXVALUE
Указывает максимальное значение, которое может быть сгенерировано (задается опционально). NO MAXVALUE — используется значение по умолчанию (максимальные значения типа данных для возрастающих последовательностей или -1 для убывающих последовательностей). Если ни один из вариантов не указан, текущее максимальное значение будет сохранено.
START WITH start
Меняет начальное значение, используемое при следующей команде ALTER SEQUENCE RESTART (задается опционально). Не влияет на текущее значение последовательности.
RESTART [ WITH restart ]
Устанавливает новое текущее значение последовательности (задается опционально). Аналогично вызову функции setval с is_called = false: указанное значение будет возвращено при следующем вызове nextval.
Запись RESTART без значения restart эквивалентна указанию начального значения, которое было записано CREATE SEQUENCE или последнего установленного ALTER SEQUENCE START WITH. В отличие от setval, операция RESTART — транзакционная и блокирует параллельные обращения к последовательности. Если это не желаемый режим работы, следует использовать setval.
CACHE cache
Задает размер кеша — количество предварительно выделенных значений, хранимых в памяти. Минимум — 1 (нет кеширования). Если не указано, сохраняется текущее значение кеша.
CYCLE
Необязательное ключевое слово CYCLE может использоваться для включения зацикливания последовательности, когда maxvalue или minvalue достигнуты возрастающей или убывающей последовательностью соответственно. Если предел достигнут, следующее сгенерированное число будет minvalue или maxvalue соответственно.
NO CYCLE
Если указано необязательное ключевое слово NO CYCLE, любые вызовы nextval после того, как последовательность достигла своего максимального значения, вернут ошибку. Если не указано ни CYCLE, ни NO CYCLE, будет сохранено прежнее поведение зацикливания.
start
Необязательное предложение START WITH start изменяет записанное начальное значение последовательности. Это не влияет на текущее значение последовательности; оно просто устанавливает значение, которое будут использовать будущие команды ALTER SEQUENCE RESTART.
restart
Необязательное предложение RESTART [ WITH restart ] изменяет текущее значение последовательности. Это аналогично вызову функции setval с is_called = false: указанное значение будет возвращено при следующем вызове nextval. Указание RESTART без значения restart эквивалентно предоставлению начального значения, которое было записано CREATE SEQUENCE или в последний раз установлено ALTER SEQUENCE START WITH.
В отличие от вызова setval, операция RESTART для последовательности является транзакционной и блокирует параллельные транзакции от получения чисел из той же последовательности. Если это не желаемый режим работы, следует использовать setval.
cache
Предложение CACHE cache позволяет предварительно выделять и хранить в памяти числа последовательности для более быстрого доступа. Минимальное значение равно 1 (за раз может быть сгенерировано только одно значение, т. е. кэширование отсутствует). Если не указано, будет сохранено прежнее значение cache.
SET { LOGGED | UNLOGGED }
Переключает последовательность между журналируемой (LOGGED) и нежурналируемой (UNLOGGED) (смотрите CREATE SEQUENCE). Не применяется к временным последовательностям.
OWNED BY table_name.column_name
OWNED BY NONE
Привязывает последовательность к столбцу таблицы. Если этот столбец (или вся таблица) будет удален — последовательность тоже удаляется. Это указание заменяет любую ранее установленную связь данной последовательности. Таблица и последовательность должны иметь одного владельца и находиться в одной схеме.
OWNED BY NONE отменяет привязку, делая последовательность автономной.
new_owner
Задает имя нового владельца последовательности.
new_name
Задает новое имя последовательности.
new_schema
Указывает новую схему последовательности.
Примечания
Изменения параметров не влияют немедленно на фоновые процессы, кроме текущего. Они продолжат использовать уже закешированные значения, пока не израсходуют их. ALTER SEQUENCE не изменяет значение currval.
Выполнение ALTER SEQUENCE блокирует параллельные вызовы nextval, currval, lastval и setval.
По историческим причинам можно использовать ALTER TABLE с последовательностями, но только для операций, аналогичных приведенным выше формам ALTER SEQUENCE.
Примеры
Перезапуск последовательности с именем serial с числа 105:
ALTER SEQUENCE serial RESTART WITH 105;
Совместимость
ALTER SEQUENCE соответствует стандарту SQL, за исключением выражений AS, START WITH, OWNED BY, OWNER TO, RENAME TO и SET SCHEMA, которые являются расширениями PostgreSQL.