ALTER DOMAIN
Эта страница переведена при помощи нейросети GigaChat.
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
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
Описание
ALTER DOMAIN используется для изменения определения уже существующего домена. Команда поддерживает несколько форм:
SET/DROP DEFAULT- Позволяют задать или удалить значение по умолчанию для домена.
Учтите, что значение по умолчанию применяется только к последующим командам
INSERTи не влияет на уже существующие строки в таблицах, где используется домен.
SET/DROP NOT NULL- Определяют, допускает ли домен значения
NULL. УстановкаSET NOT NULLвозможна только в случае, если все существующие значения в столбцах, использующих данный домен, являются ненулевыми.
ADD domain_constraint [ NOT VALID ]- Добавляет новое ограничение к домену. При этом все существующие столбцы, использующие данный домен, будут проверены на соответствие новому ограничению. Чтобы избежать немедленной проверки уже существующих данных, можно указать
NOT VALID. В этом случае ограничение будет применяться только к новым или изменяемым данным, а для проверки старых данных его позже можно сделать действительным с помощью командыALTER DOMAIN ... VALIDATE CONSTRAINT. ПараметрNOT VALIDразрешен только для ограничений типаCHECK.
DROP CONSTRAINT [ IF EXISTS ]- Удаляет указанное ограничение из домена. Если используется
IF EXISTSи ограничение отсутствует, ошибка не возникает — вместо этого будет выдано уведомление.
RENAME CONSTRAINT- Переименовывает существующее ограничение, заданное на домен.
VALIDATE CONSTRAINT- Проверяет ранее добавленное с
NOT VALIDограничение, удостоверяясь, что все существующие значения в столбцах, использующих домен, соответствуют этому ограничению.
OWNER- Изменяет владельца домена на указанного пользователя.
RENAME- Переименовывает домен.
SET SCHEMA- Изменяет схему домена. При этом все связанные с ним ограничения автоматически переходят в новую схему.
Чтобы выполнить эту команду, необходимо быть владельцем домена. Чтобы изменить схему, необходимо также иметь привилегию CREATE в целевой схеме.
Изменить владельца можно только при условии, что имеется право SET ROLE для новой роли-владельца, а сама роль обладает привилегией 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.
Это обеспечит надежную проверку всех данных, поскольку после фиксации ограничения все новые транзакции гарантированно будут соблюдать его относительно новых значений типа домена..
Следует учитывать, что в текущей версии PostgreSQL команды ALTER DOMAIN ADD CONSTRAINT, ALTER DOMAIN VALIDATE CONSTRAINT и ALTER DOMAIN SET NOT NULL завершатся с ошибкой, если домен (или домен, основанный на нем) используется в столбце с типом-контейнером (составной, диапазонный тип или массив) в любой таблице базы данных. В будущем планируется усовершенствовать эти команды, чтобы они могли обрабатывать такие вложенные случаи корректно.
Примеры
Добавление ограничения к области:
ALTER DOMAIN zipcode SET NOT NULL;
Удаление ограничения из области:
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.