Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

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>

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 или нет. Вы можете использовать SET NOT 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 пытается проверить, что существующие сохраненные данные удовлетворяют новому ограничению, эта проверка не является надежной, потому что команда не может "видеть" строки таблицы, которые были только что вставлены или обновлены и еще не зафиксированы (COMMIT). Если существует риск, что параллельные операции могут вставить некорректные данные, следует действовать следующим образом: добавьте ограничение с использованием опции 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, которые являются расширениями PostgreSQL. Выражение NOT VALID варианта ADD CONSTRAINT также является расширением PostgreSQL.

См. также