ALTER DOMAIN
ALTER DOMAIN — изменить определение домена
Синтаксис
ALTER DOMAINимя
{ SET DEFAULTвыражение
| DROP DEFAULT } ALTER DOMAINимя
{ SET | DROP } NOT NULL ALTER DOMAINимя
ADDограничение_домена
[ NOT VALID ] ALTER DOMAINимя
DROP CONSTRAINT [ IF EXISTS ]имя_ограничения
[ RESTRICT | CASCADE ] ALTER DOMAINимя
RENAME CONSTRAINTимя_ограничения
TOимя_нового_ограничения
ALTER DOMAINимя
VALIDATE CONSTRAINTимя_ограничения
ALTER DOMAINимя
OWNER TO {новый_владелец
| CURRENT_USER | SESSION_USER } ALTER DOMAINимя
RENAME TOновое_имя
ALTER DOMAINимя
SET SCHEMAновая_схема
Описание
ALTER DOMAIN
изменяет определение существующего домена. Эта команда имеет несколько разновидностей:
- SET/DROP DEFAULT
Эти формы задают/убирают значение по умолчанию для домена. Заметьте, что эти значения по умолчанию применяются только при последующих командах
INSERT
; они не меняются в строках с данным доменом, уже добавленных в таблицу.- SET/DROP NOT NULL
Эти формы определяют, будет ли домен принимать значения NULL или нет.
SET NOT NULL
можно выполнить, только если столбцы с этим доменом ещё не содержат значений NULL.- ADD
ограничение_домена
[ NOT VALID ] Эта форма добавляет новое ограничение для домена с тем же синтаксисом, что описан в CREATE DOMAIN. Когда добавляется новое ограничение домена, все столбцы с этим доменом будут проверены на соответствие этому ограничению. Эти проверки можно подавить, добавив указание
NOT VALID
, а затем активировать позднее с помощью командыALTER DOMAIN ... VALIDATE CONSTRAINT
. Вновь вставленные или изменённые строки всегда проверяются по всем ограничениям, даже тем, что отмечены какNOT VALID
. УказаниеNOT VALID
допускается только для ограниченийCHECK
.- DROP CONSTRAINT [ IF EXISTS ]
Эта форма убирает ограничения домена. Если указано
IF EXISTS
и заданное ограничение не существует, это не считается ошибкой. В этом случае выдаётся только замечание.- RENAME CONSTRAINT
Эта форма меняет название ограничения домена.
- VALIDATE CONSTRAINT
Эта форма включает проверку ограничения, ранее добавленного как
NOT VALID
, то есть проверяет все данные в столбцах с этим доменом на соответствие этому ограничению.- OWNER
Эта форма меняет владельца домена на заданного пользователя.
RENAME
Эта форма меняет название домена.
- SET SCHEMA
Эта форма меняет схему домена. Все ограничения, связанные с данным доменом, так же переносятся в новую схему.
Выполнить ALTER DOMAIN
может только владелец соответствующего домена. Чтобы сменить схему домена, необходимо также иметь право CREATE
в новой схеме. Чтобы сменить владельца, необходимо быть непосредственным или опосредованным членом новой роли-владельца, а эта роль должна иметь право CREATE
в схеме домена. (С такими ограничениями при смене владельца не происходит ничего такого, что нельзя было бы сделать, имея право удалить и вновь создать домен. Однако суперпользователь может сменить владельца домена в любом случае.)
Параметры
имя
Имя существующего домена (возможно, дополненное схемой), подлежащего изменению.
ограничение_домена
Новое ограничение домена.
имя_ограничения
Имя существующего ограничения, подлежащего удалению или переименованию.
NOT VALID
Не проверять существующие данные в столбцах на соответствие ограничению.
CASCADE
Автоматически удалять объекты, зависящие от данного ограничения.
RESTRICT
Отказать в удалении ограничения, если существуют зависящие от него объекты. Это поведение по умолчанию.
новое_имя
Новое имя домена.
имя_нового_ограничения
Новое имя ограничения.
новый_владелец
Имя пользователя, назначаемого новым владельцем домена.
новая_схема
Новая схема домена.
Замечания
В настоящее время команды ALTER DOMAIN ADD CONSTRAINT
, ALTER DOMAIN VALIDATE CONSTRAINT
и ALTER DOMAIN SET NOT NULL
выдают ошибку, если проверяемый указанный домен или производный от него используется в столбце составного типа в любой таблице БД. В дальнейшем они будут доработаны, с тем чтобы новое ограничение проверялось и при такой вложенности.
Примеры
Добавление ограничения NOT NULL
к домену:
ALTER DOMAIN zipcode SET NOT NULL;
Удаление ограничения NOT NULL
из домена:
ALTER DOMAIN zipcode DROP NOT NULL;
Добавление ограничения-проверки к домену:
ALTER DOMAIN zipcode ADD CONSTRAINT zipchk CHECK (char_length(VALUE) = 5);
Удаление ограничения-проверки из домена:
ALTER DOMAIN zipcode DROP CONSTRAINT zipchk;
Переименование ограничения-проверки в домене:
ALTER DOMAIN zipcode RENAME CONSTRAINT zipchk TO zip_check;
Перемещение домена в другую схему:
ALTER DOMAIN zipcode SET SCHEMA customers;
Совместимость
ALTER DOMAIN
соответствует стандарту SQL, за исключением подвидов OWNER
, RENAME
, SET SCHEMA
и VALIDATE CONSTRAINT
, которые являются расширениями Postgres Pro. Предложение NOT VALID
вариации ADD CONSTRAINT
также является расширением Postgres Pro.