Перейти к основному содержимому

ALTER SEQUENCE

примечание

Эта страница переведена при помощи нейросети GigaChat.

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

Синтаксис

ALTER SEQUENCE [ IF EXISTS ] name
[ AS data_type ]
[ INCREMENT [ BY ] increment ]
[ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
[ START [ WITH ] start ]
[ RESTART [ [ WITH ] restart ] ]
[ CACHE cache ] [ [ NO ] CYCLE ]
[ 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 minvalue
NO MINVALUE
Указывает минимальное значение, которое может выдать последовательность (задается опционально). NO MINVALUE — используется значение по умолчанию (1 для возрастающей, минимально возможное значение для убывающей). Если ни один из вариантов не указан, текущее минимальное значение будет сохранено.
MAXVALUE maxvalue
NO 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
NO CYCLE
Зацикливает последовательность при достижении maxvalue или minvalue соответственно для возрастающей или убывающей последовательности (задается опционально). Когда этот предел достигается, следующим числом этих последовательностей будет соответственно minvalue или maxvalue.

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

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.

Смотрите также

CREATE SEQUENCE, DROP SEQUENCE