ALTER SEQUENCE#
ALTER SEQUENCE
ALTER SEQUENCE — изменить определение генератора последовательностей
Синтаксис
ALTER SEQUENCE [ IF EXISTS ]name
[ ASdata_type
] [ INCREMENT [ BY ]increment
] [ MINVALUEminvalue
| NO MINVALUE ] [ MAXVALUEmaxvalue
| NO MAXVALUE ] [ START [ WITH ]start
] [ RESTART [ [ WITH ]restart
] ] [ CACHEcache
] [ [ 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 TOnew_name
ALTER SEQUENCE [ IF EXISTS ]name
SET SCHEMAnew_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
позволяет предварительно выделять и хранить в памяти последовательные номера для более быстрого доступа. Минимальное значение равно 1 (может быть сгенерировано только одно значение за раз, то есть без кеша). Если не указано, будет сохранено старое значение кеша.cache
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.