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