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_USER | SESSION_USER }

ALTER DOMAIN <name> RENAME TO <new_name>

ALTER DOMAIN <name> SET SCHEMA <new_schema>

Описание

ALTER DOMAIN изменяет определение существующего домена. Существует несколько подформ:

  • SET/DROP DEFAULT — Эти формы устанавливают или удаляют значение по умолчанию для домена. Обратите внимание, что значения по умолчанию применяются только к последующим командам INSERT. Они не влияют на строки, уже находящиеся в таблице, использующей домен.
  • SET/DROP NOT NULL — Эти формы изменяют пометку домена: разрешать ли значения NULL или запрещать их. Установить NOT NULL можно только в том случае, если столбцы, использующие домен, не содержат значений NULL.
  • ADD domain_constraint [ 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 в схеме домена. (Эти ограничения обеспечивают, что изменение владельца не позволяет делать ничего такого, чего нельзя добиться удалением и повторным созданием домена. Однако суперпользователь может изменить владельца любого домена.)

Параметры

  • name
    • Имя (опционально с указанием схемы) существующего домена, который необходимо изменить.
  • domain_constraint
    • Новое ограничение домена.
  • constraint_name
    • Имя существующего ограничения, которое нужно удалить или переименовать.
  • NOT VALID
    • Не проверять существующие данные столбцов на соответствие ограничению.
  • CASCADE
    • Автоматически удалять объекты, зависящие от ограничения, и, в свою очередь, все объекты, зависящие от них.
  • 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, которые являются расширениями Database. Клаузула NOT VALID варианта ADD CONSTRAINT также является расширением YMatrix Database.

Смотрите также

CREATE DOMAIN, DROP DOMAIN