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.