Перейти к основному содержимому

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 пытается проверить соответствие новых ограничений уже сохраненным данным. Однако эта проверка может быть ненадежной: команда не учитывает строки, которые были недавно вставлены или изменены и еще не зафиксированы. Если возможна ситуация, при которой параллельные транзакции добавляют недопустимые данные, рекомендуется следующий порядок действий:

  1. Добавить ограничение с параметром NOT VALID.
  2. Зафиксировать эту команду.
  3. Дождаться завершения всех активных транзакций, начатых до этой фиксации.
  4. Выполнить 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.

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

CREATE DOMAIN, DELETE DOMAIN