A <firstterm>domain</firstterm> is a user-defined data type that is based on another <firstterm>underlying type</firstterm>. Optionally, it can have constraints that restrict its valid values to a subset of what the underlying type would allow. Otherwise it behaves like the underlying type — for example, any operator or function that can be applied to the underlying type will work on the domain type. The underlying type can be any built-in or user-defined base type, enum type, array type, composite type, range type, or another domain. ドメインは他の基となる型を元にしたユーザ定義のデータ型です。 オプションとして基となる型が許可する型のサブセットの有効な値を制限する制約を持つことができます。 他は基となる型のように振る舞います。—例えば、基となる型に適用できる演算子や関数はドメイン型でも動作します。 ビルトインもしくはユーザが定義した基本型や列挙型、配列型、複合化型、範囲型もしくは他のドメインが基となる型になれます。
For example, we could create a domain over integers that accepts only positive integers: 例として正の整数のみを許容する整数型のドメインを作成します。
CREATE DOMAIN posint AS integer CHECK (VALUE > 0); CREATE TABLE mytable (id posint); INSERT INTO mytable VALUES(1); -- works INSERT INTO mytable VALUES(-1); -- fails
When an operator or function of the underlying type is applied to a
domain value, the domain is automatically down-cast to the underlying
type. Thus, for example, the result of <literal>mytable.id - 1</literal>
is considered to be of type <type>integer</type> not <type>posint</type>.
We could write <literal>(mytable.id - 1)::posint</literal> to cast the
result back to <type>posint</type>, causing the domain's constraints
to be rechecked. In this case, that would result in an error if the
expression had been applied to an <structfield>id</structfield> value of
1. Assigning a value of the underlying type to a field or variable of
the domain type is allowed without writing an explicit cast, but the
domain's constraints will be checked.
基となる型の演算子や関数にドメインの値が適用されると、ドメインは自動的に基となる型にダウンキャストされます。
このため、例えば、mytable.id - 1
の結果はposint
ではなく、integer
型として考えられます。
ドメイン制約の再チェックが発生するのでposint
型にキャストするために(mytable.id - 1)::posint
と記述することができます。
このケースでは、式にid
の値として1が与えられると結果はエラーになるでしょう。
明確なキャストを書かずにドメイン型の変数やフィールドに基となる型の値を代入することが許容されていますが、ドメインの制約はチェックされます。
For additional information see <xref linkend="sql-createdomain"/>. より詳細な情報はCREATE DOMAINを確認ください。