CREATE TYPE typename ( INPUT = input_function, OUTPUT = output_function , INTERNALLENGTH = { internallength | VARIABLE } [ , EXTERNALLENGTH = { externallength | VARIABLE } ] [ , DEFAULT = "default" ] [ , ELEMENT = element ] [ , DELIMITER = delimiter ] [ , SEND = send_function ] [ , RECEIVE = receive_function ] [ , PASSEDBYVALUE ] [ , ALIGNMENT = alignment ] [ , STORAGE = storage ] )
作成する型の名前です。
新しい型の内部長を指定するリテラル値です。
新しい型の外部長を指定するリテラル値です。
CREATE FUNCTION によって作成された、 外部形式のデータを、 その型の内部形式のデータに変換する関数 の名前です。
CREATE FUNCTION によって作成された、内部形式 によるデータを 表示に適した形式のデータに変換する関数の名前です。
作成されるのは配列型で、その配列の要素の型を指定します。
その配列要素の区切り文字です。
データ型のデフォルト値です。通常はこれは省略されるので デフォルトは NULL になります。
CREATE FUNCTION によって作成された、この型の データを他のマシンに転送できるような形式に変換する関数の名前です。
CREATE FUNCTION によって作成された、 この型のデータを 他のマシンから、内部形式に転送 できるような形式に変換する関数の名前です。
データ型の格納整列要求です。指定された場合、'int4' または 'double'でなければなりません。 デフォルトは 'int4' です。
データ型の格納テクニックです。指定された場合、 'plain'、 'external'、 'extended'、または 'main' でなければなりません。デフォルトは 'plain' です。
CREATE TYPE はユーザが Postgres に、指定した データベースで使用する新しいユーザ定義のデータ型を登録します。 型を定義したユーザはその所有者となります。 typename は 新しい型の名前で、そのデータベースに定義された型名の中で一意 でなければなりません。
CREATE TYPE は、型を定義する前に、 (CREATE FUNCTION を用いて)二つの関数を登録する必要があります。 新しい基本型の表現は input_function で決定され、型の外部表現を、その型に対して定義された演算子と 関数が使用可能となる内部表現に変換されます。当然、 output_function は 逆変換を実行します。入力と出力の関数は共に、型 "opaque" の一つまたは二つの引数を取るように宣言されなければなりません。
新しい基本型は、固定長の場合 internallength が 正の整数で、可変長の場合はその新しい型が Postgres が提供するデータ型 "text" と同じ形式であると Postgres は推定します。 型が可変長であることを示すには、 internallength を VARIABLE に設定します。 その外部表現は、 externallength キーワードを使用して同じように指定されます。
型が配列であり、型が配列要素を持っていることを示すには、 ELEMENT キーワードを使用して配列要素の型を指定します。 例えば、 4 バイト整数 ("int4") の配列を定義するには
ELEMENT = int4を指定します。
この型の配列に使用する区切り文字を示すには、 delimiter で 特定の文字を設定します。デフォルトの区切り文字はコンマ (",") です。
ユーザが "data not present" (データがありませんの表示)を意味する 特定のビットパターンを望むのであれば、デフォルト値をオプションで 指定することが出来ます。 DEFAULT キーワードでデフォルトを指定 します。
アプリケーションプログラムが、Postgres サービスが別のマシン 上で 動いている事を想定している場合、オプションの引数、 send_function および receive_function を使用します。 この場合、Postgres が動いているマシンは、遠隔マシンで使用されているものと 異なる型形式を使用することができます。そして、サーバからクライアントに 送る時はデータ項目を標準形式に変換し、クライアントからサーバがデータを 受け取る時は、標準形式からマシン固有の形式に変換することが適切な処理です。 これらの関数が指定されていない場合、すべてのこの件に関連したマシンの アーキテクチャが、その型の内部形式を認識できると推測します。例えば、 他の多くの型では必要とされる、Sun-4 から DECstation に送られる一文字は 変換される必要がありません。
オプションのフラグ、PASSEDBYVALUE は、引数が参照 によってではなく、値として渡されなければならないデータ型を使用する 演算子と関数であることを示します。 内部表現が 4 バイト以上の値の型を渡 してはならないことに注意して下さい。
キーワード storage は可変長データ型の格納ストラテジの選択を可能にします (固定長型には plain のみが許されています)。 plain はデータ型に TOAST を使えなくします。 常に一列に格納され圧縮されません。 extended は TOAST の全ての機能を有効にします。 システムはまず長いデータ値を圧縮しようとし、それでもまだ長過ぎる 場合は値をメインテーブルの行から削除します。 external はメインテーブルから値を削除することを 許しますが、システムはそれを圧縮しようとしません。 main は圧縮を許しますが、値をメインテーブル から削除することを止めます。(この格納メソッドを持つデータアイテム は他に行を適合させる方法がない場合は削除されるかもしれませんが、 extended と external アイテムより優先して残されます。
新しい基本型に対し、ユーザはこの節で記述した適切な手法で演算子、 関数および集約を定義することができます。
このコマンドはボックスデータ型を作成し、その型をテーブル 定義の中で使用します。
CREATE TYPE box (INTERNALLENGTH = 8, INPUT = my_procedure_1, OUTPUT = my_procedure_2); CREATE TABLE myboxes (id INT4, description box);
このコマンドは整数要素を持つ可変長配列型を作成します。
CREATE TYPE int4array (INPUT = array_in, OUTPUT = array_out, INTERNALLENGTH = VARIABLE, ELEMENT = int4); CREATE TABLE myarrays (id int4, numbers int4array);
このコマンドはラージオブジェクト型を作成し、その型をテーブル 定義の中で使用します。
CREATE TYPE bigobj (INPUT = lo_filein, OUTPUT = lo_fileout, INTERNALLENGTH = VARIABLE); CREATE TABLE big_objs (id int4, obj bigobj);