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

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 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

Необязательное ключевое слово 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.

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

CREATE SEQUENCE, DROP SEQUENCE