★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

ALTER DOMAIN

名前

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
    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
    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を実行できるのは、ドメインを使用する列にNULL値が含まれていない場合のみです。

ADD domain_constraint [ NOT VALID ]

この構文はCREATE DOMAINと同一の構文を使って、ドメインに新しい制約を付与します。 新しい制約がドメインに追加された時、そのドメインを使用するすべての列が新しく追加された制約に対して検査されます。 これらの検査をNOT VALIDオプションを使用して新しい制約を追加することで抑制することができます。 ALTER DOMAIN ... VALIDATE CONSTRAINTを使用することで、後で制約を有効にすることができます。 新しく挿入または更新された行については、NOT VALIDと印が付いていたとしても、常にすべての制約が検査されます。 NOT VALIDCHECK制約でのみ受け付けられます。

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 CONSTRAINTALTER 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に準拠しています。 ただし、OWNERRENAMESET SCHEMAVALIDATE CONSTRAINT構文は例外で、PostgreSQLの拡張です。 ADD CONSTRAINT構文のNOT VALID句もPostgreSQLの拡張です。

関連項目

CREATE DOMAIN, DROP DOMAIN