CREATE DOMAIN name [AS] data_type [ DEFAULT expression ] [ constraint [ ... ] ] ここでconstraintは、以下の通りです。 [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK (expression) }
CREATE DOMAINは新しいデータドメインを作成します。 ドメインを定義したユーザが、その所有者となります。
スキーマ名が付けられている場合(例えば、CREATE DOMAIN myschema.mydomain ...)、ドメインは指定されたスキーマで作成されます。 付けられていなければ、そのドメインは現在のスキーマで作成されます。 ドメイン名は、そのスキーマ内に存在するデータ型およびドメインの間で、一意である必要があります。
ドメインを使用すると、テーブル間で共通なフィールドをメンテナンスのために1箇所にまとめることができ、便利です。 例えば、E-mailアドレスの列が複数のテーブルで使用されていて、全て同じプロパティを持っている場合があります。 各テーブルに個別に制約を設定するよりも、ドメインを定義し、この機能を使用してください。
作成するドメインの名前です(スキーマ修飾名でも可)。
ドメインの基礎をなすデータ型です。 これには、配列指定子が含まれる場合があります。
DEFAULT句を使用すると、ドメインデータ型の列にデフォルト値を指定できます。 その値は、任意の無変数式です(ただし、副問い合わせは許可されません)。 デフォルト式のデータ型は、そのドメインのデータ型と一致する必要があります。 デフォルト値が指定されない場合、デフォルト値はNULL値となります。
デフォルト式は、その列に値が指定されない、全ての挿入操作において使用されます。 デフォルト値が特定の列に定義された場合は、ドメインに関連したデフォルト値は上書きされます。 反対に、基礎となるデータ型に関連したデフォルト値は、ドメインのデフォルト値によって上書きされます。
省略可能な制約の名前です。 指定されなければ、システムが名前を生成します。
このドメインの値としてNULLを使用できません。
このドメインの値としてNULLを使用できます。 これがデフォルトです。
この句は非標準的なSQLデータベースとの互換性のためだけに使用可能です。 新しいアプリケーションでこれを使用しないでください。
CHECK句は、整合性制約やドメインの値が満たさなければならない検査を指定します。 各制約は、Boolean型の結果を生成する式である必要があります。 検査される値を参照するには、VALUEという名前を使用しなければなりません。
現時点では、CHECK式には、副問い合わせを含めることはできず、VALUE以外の変数を参照することもできません。
この例では、us_postal_codeデータ型を作成し、その型をテーブル定義の中で使用します。 データが有効なUS郵便番号に合うかどうかを検証するために正規表現検査が使用されます。
CREATE DOMAIN us_postal_code AS TEXT CHECK( VALUE ~ '^\\d{5}$' OR VALUE ~ '^\\d{5}-\\d{4}$' ); CREATE TABLE us_snail_addy ( address_id SERIAL NOT NULL PRIMARY KEY , street1 TEXT NOT NULL , street2 TEXT , street3 TEXT , city TEXT NOT NULL , postal us_postal_code NOT NULL );