ALTER DOMAIN#

ALTER DOMAIN

ALTER DOMAIN

ALTER DOMAIN — изменить определение домена

Синтаксис

ALTER DOMAIN name
    { SET DEFAULT expression | DROP DEFAULT }
ALTER DOMAIN name
    { SET | DROP } NOT NULL
ALTER DOMAIN name
    ADD domain_constraint [ NOT VALID ]
ALTER DOMAIN name
    DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
ALTER DOMAIN name
     RENAME CONSTRAINT constraint_name TO new_constraint_name
ALTER DOMAIN name
    VALIDATE CONSTRAINT constraint_name
ALTER DOMAIN name
    OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER DOMAIN name
    RENAME TO new_name
ALTER DOMAIN name
    SET SCHEMA new_schema

where domain_constraint is:

[ CONSTRAINT constraint_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.

См. также

CREATE DOMAIN, DROP DOMAIN