ALTER SEQUENCE#

ALTER SEQUENCE

ALTER SEQUENCE

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 изменяет параметры существующего генератора последовательностей. Любые параметры, которые не были явно установлены в команде ALTER SEQUENCE, сохраняют свои предыдущие настройки.

Вы должны владеть последовательностью, чтобы использовать ALTER SEQUENCE. Чтобы изменить схему последовательности, вы также должны иметь привилегию CREATE на новую схему. Чтобы изменить владельца, вы должны иметь возможность использовать SET ROLE для новой роли владельца, и эта роль должна иметь привилегию CREATE на схему последовательности. (Эти ограничения обеспечивают, что изменение владельца не делает ничего, что вы не могли бы сделать, удалив и воссоздав последовательность. Однако суперпользователь может изменить владельца любой последовательности в любом случае.)

Параметры

name

Имя (опционально с указанием схемы) последовательности, которую нужно изменить.

IF EXISTS

Не генерировать ошибку, если последовательность не существует. В этом случае будет выдано уведомление.

data_type

Необязательное предложение AS data_type изменяет тип данных последовательности. Допустимые типы данных: smallint, integer, и bigint.

Смена типа данных автоматически изменяет минимальное и максимальное значения последовательности только в том случае, если предыдущие минимальное и максимальное значения были минимальным или максимальным значением старого типа данных (то есть, если последовательность была создана с использованием NO MINVALUE или NO MAXVALUE, неявно или явно). В противном случае минимальные и максимальные значения сохраняются, если только новые значения не указаны в рамках той же команды. Если минимальные и максимальные значения не помещаются в новый тип данных, будет сгенерирована ошибка.

increment

Предложение INCREMENT BY increment является необязательной. Положительное значение создаст возрастающую последовательность, отрицательное - убывающую. Если не указано, будет сохранено старое значение приращения.

minvalue
NO MINVALUE

Опциональная фраза MINVALUE minvalue определяет минимальное значение, которое может генерировать последовательность. Если указано NO MINVALUE, будут использоваться значения по умолчанию: 1 для возрастающих последовательностей и минимальное значение для убывающих последовательностей, соответствующее типу данных. Если ни одна из опций не указана, текущее минимальное значение будет сохранено.

maxvalue
NO MAXVALUE

Опциональное предложение MAXVALUE maxvalue определяет максимальное значение для последовательности. Если указано NO MAXVALUE, будут использованы значения по умолчанию для максимального значения типа данных и -1 для возрастающих и убывающих последовательностей соответственно. Если ни одна из опций не указана, текущее максимальное значение будет сохранено.

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 (может быть сгенерировано только одно значение за раз, то есть без кеша). Если не указано, будет сохранено старое значение кеша.

CYCLE

Необязательное ключевое слово CYCLE может использоваться для включения оборачивания последовательности, когда maxvalue или minvalue были достигнуты соответственно для возрастающей или убывающей последовательности. Если достигнут предел, следующее сгенерированное число будет minvalue или maxvalue соответственно.

NO CYCLE

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

SET { LOGGED | UNLOGGED }

Эта форма изменяет последовательность с незарегистрированной на зарегистрированную или наоборот (см. CREATE SEQUENCE). Она не может быть применена к временной последовательности.

OWNED BY table_name.column_name
OWNED BY NONE

Специальная опция OWNED BY позволяет связать последовательность с определенным столбцом таблицы таким образом, что если этот столбец (или вся таблица) будет удален, последовательность также будет автоматически удалена. Если указана эта связь, она заменяет любую ранее указанную связь для последовательности. Указанная таблица должна иметь того же владельца и находиться в той же схеме, что и последовательность. Указание OWNED BY NONE удаляет любую существующую связь, делая последовательность самостоятельной.

new_owner

Имя пользователя нового владельца последовательности.

new_name

Новое имя для последовательности.

new_schema

Новая схема для последовательности.

Примечания

Внесение изменений в последовательность ALTER SEQUENCE не повлияет немедленно на результаты nextval в бэкендах, отличных от текущего, которые имеют предварительно выделенные (кешированные) значения последовательности. Они будут использовать все кешированные значения до того, как заметят измененные параметры генерации последовательности. Текущий бэкенд будет затронут немедленно.

ALTER SEQUENCE не влияет на статус currval для последовательности. (До PostgreSQL 8.3 это иногда происходило).

ALTER SEQUENCE блоки параллельные вызовы nextval, currval, lastval и setval.

Для исторических причин ALTER TABLE может использоваться также с последовательностями; но единственные варианты ALTER TABLE, разрешенные с последовательностями, эквивалентны показанным выше формам.

Примеры

Перезапустите последовательность с именем serial, на 105:

ALTER SEQUENCE serial RESTART WITH 105;

Совместимость

ALTER SEQUENCE соответствует стандарту SQL, за исключением предложений AS, START WITH, OWNED BY, OWNER TO, RENAME TO и SET SCHEMA, которые являются расширениями Tantor BE.