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.