ALTER DOMAIN#
ALTER DOMAIN
ALTER DOMAIN — изменить определение домена
Синтаксис
ALTER DOMAINname
{ SET DEFAULTexpression
| DROP DEFAULT } ALTER DOMAINname
{ SET | DROP } NOT NULL ALTER DOMAINname
ADDdomain_constraint
[ NOT VALID ] ALTER DOMAINname
DROP CONSTRAINT [ IF EXISTS ]constraint_name
[ RESTRICT | CASCADE ] ALTER DOMAINname
RENAME CONSTRAINTconstraint_name
TOnew_constraint_name
ALTER DOMAINname
VALIDATE CONSTRAINTconstraint_name
ALTER DOMAINname
OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER DOMAINname
RENAME TOnew_name
ALTER DOMAINname
SET SCHEMAnew_schema
wheredomain_constraint
is: [ CONSTRAINTconstraint_name
] { NOT NULL | CHECK (expression
) }
Описание
ALTER DOMAIN
изменяет определение существующего домена.
Существует несколько подформ:
SET
/DROP DEFAULT
Эти формы устанавливают или удаляют значение по умолчанию для домена. Обратите внимание, что значения по умолчанию применяются только к последующим командам
INSERT
; они не влияют на строки, уже находящиеся в таблице, использующей данный домен.SET
/DROP NOT NULL
Эти формы изменяются в зависимости от того, разрешены ли значения NULL для домена или отклоняются значения NULL. Вы можете использовать только
SET NOT NULL
, когда столбцы, использующие домен, не содержат значений NULL.ADD
domain_constraint
[ NOT VALID ]Эта форма добавляет новое ограничение к домену. Когда новое ограничение добавляется к домену, все столбцы, использующие этот домен, будут проверены на соответствие новому ограничению. Эти проверки могут быть подавлены добавлением нового ограничения с использованием опции
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
привилегию на новую схему.
Чтобы изменить владельца, вы должны иметь возможность SET ROLE
на
новую роль владельца, и эта роль должна иметь привилегию CREATE
на схему домена. (Эти ограничения обеспечивают, что изменение владельца
не делает ничего, чего вы не могли бы сделать, удалив и воссоздав домен.
Однако суперпользователь может изменить владельца любого домена в любом случае.)
Параметры
name
Имя (возможно, с указанием схемы) существующего домена для изменения.
domain_constraint
Новое ограничение домена для домена.
constraint_name
Имя существующего ограничения для удаления или переименования.
NOT VALID
Не проверять существующие хранимые данные на соответствие ограничениям.
CASCADE
Автоматически удаляйте объекты, зависящие от ограничения, а также все объекты, зависящие от этих объектов (см. Раздел 5.14).
RESTRICT
Отказаться от удаления ограничения, если есть зависимые объекты. Это поведение по умолчанию.
new_name
Новое имя для домена.
new_constraint_name
Новое имя для ограничения.
new_owner
Имя пользователя нового владельца домена.
new_schema
Новая схема для домена.
Примечания
Хотя команда ALTER DOMAIN ADD CONSTRAINT
пытается проверить, что существующие хранимые данные удовлетворяют новому ограничению, эта проверка не является надежной, поскольку команда не может "увидеть" строки таблицы, которые только что были вставлены или обновлены и еще не подтверждены. Если существует опасность того, что параллельные операции могут вставить некорректные данные, следует добавить ограничение с использованием опции NOT VALID
, зафиксировать эту команду, дождаться завершения всех транзакций, начатых до этого коммита, а затем выполнить команду ALTER DOMAIN VALIDATE CONSTRAINT
для поиска данных, нарушающих ограничение. Этот метод надежен, потому что после коммита ограничения все новые транзакции гарантированно применяют его к новым значениям типа домена.
В настоящее время, команды 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
, которые являются расширениями
Tantor BE. Кроме того, NOT VALID
вариант ADD CONSTRAINT
также является расширением
Tantor BE.