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.