ALTER DOMAIN — ドメイン定義を変更する
ALTER DOMAINname{ SET DEFAULTexpression| DROP DEFAULT } ALTER DOMAINname{ SET | DROP } NOT NULL ALTER DOMAINnameADDdomain_constraint[ NOT VALID ] ALTER DOMAINnameDROP CONSTRAINT [ IF EXISTS ]constraint_name[ RESTRICT | CASCADE ] ALTER DOMAINnameRENAME CONSTRAINTconstraint_nameTOnew_constraint_nameALTER DOMAINnameVALIDATE CONSTRAINTconstraint_nameALTER DOMAINnameOWNER TO {new_owner| CURRENT_USER | SESSION_USER } ALTER DOMAINnameRENAME TOnew_nameALTER DOMAINnameSET SCHEMAnew_schema
ALTER DOMAINは既存ドメインの定義を変更します。
以下に示す副構文があります。
SET/DROP DEFAULT
この構文はドメインのデフォルト値の設定または削除を行います。
指定したデフォルト値は、その後のINSERTコマンドのみに適用されることに注意してください。
そのドメインを使用したテーブルの既存の行には影響を与えません。
SET/DROP NOT NULL
この構文はドメインがNULL値を持つことができるかどうかを変更します。
SET 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その制約に依存するオブジェクトを自動的に削除し、さらにそれらのオブジェクトに依存するすべてのオブジェクトも削除します(5.13参照)。
RESTRICT依存するオブジェクトがある場合、制約の削除要求を拒否します。 これがデフォルトの動作です。
new_nameドメインの新しい名前です。
new_constraint_name制約の新しい名前です。
new_ownerドメインの新しい所有者となるユーザの名前です。
new_schemaドメインの新しいスキーマです。
今のところ、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;
ドメインにCHECK制約を付与します。
ALTER DOMAIN zipcode ADD CONSTRAINT zipchk CHECK (char_length(VALUE) = 5);
ドメインからCHECK制約を削除します。
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の拡張です。
ADD CONSTRAINT構文のNOT VALID句もPostgreSQLの拡張です。