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 ] )
作成する型の名前。
新しい型の内部長を指定する、リテラル値。
新しい型の外部長を指定する、リテラル値。
CREATE FUNCTION によって作成された、 外部形式のデータをその型の内部形式に変換する関数の名前。
CREATE FUNCTION によって作成された、 内部形式のデータを表示に適した形式に変換する関数の名前。
作成される型は配列になります。 ここでは配列要素の型を指定します。
配列用の区切り文字。
"data not present"(データがありません)を示すために表示さ れるデフォルトのテキスト。
CREATE FUNCTION によって作成された、 この型のデータを他のマシンへの転送に適した形式に変換す る関数の名前。
CREATE FUNCTION によって作成された、 この型のデータを他のマシンから内部形式への転送に適した 形式に変換する関数の名前。
CREATE TYPE を使用して、ユーザは現在の データベースで使用できる新しいユーザデータ型を Postgres に 登録できます。 型を定義したユーザはその所有者になります。 typename は、その新しい型の名前であり、そのデータベースで定義された 型の中で一意なものでなければなりません。
CREATE TYPE では、型を定義する前に (create 関数を使用して) 2 つの関数を登録する必要があります。 新しい基本型の表現形式は、型の外部表現形式を、その型用に 定義される演算子と関数で使用される内部表現形式に変換する input_function によって決まります。 当然、 output_function はこの逆の変換を行ないます。 この入力用関数と出力用関数はどちらも、 "opaque" 型の引数を 1 つもしくは 2 つ取る ように宣言されなければなりません。
新しい基本型を、 internallength が正の整数となる、固定長として作成することも、Postgres がその型が Postgres の組み込みデータ型 "text" と同じ 形式をとるものと仮定する、可変長として作成することもできます。 型が可変長であることを示すためには、 internallength を VARIABLE に設定して下さい。 外部表現形式も同様に、 externallength キーワードを使用して指定されます。
型が配列であり、型が配列要素を持つことを示すためには、 ELEMENT キーワードを使用して、その配列要素の型を指定 して下さい。 例えば、 4 バイト整数 ("int4") の配列を定義するには、
ELEMENT = int4と指定して 下さい。
その型の配列で使用される区切り文字を示すために、 delimiter を特別な文字に設定することができます。 デフォルトの区切り文字はカンマ (",") です。
"データが存在しない" ことを意味する何らかの特定のビットパター ンを持たせたい場合、デフォルト値をオプションで指定することが できます。 DEFAULT キーワードを使って、このデフォルト 値を指定して下さい。
省略可能な send_function と receive_function という引数は、Postgres サービスに要求を送るアプリケーションプ ログラムが異なるマシン上にある場合に使用されます。 この場合、Postgres が動作しているマシンは、リモートマシンで使 われるデータ型の形式と異なる形式を使用する可能性があります。 この場合の適切な方式は、サーバからクライアントに送信する際に データ項目を標準形式に変換し、そして、サーバがクライアントか らデータを受信する際に、標準形式からマシン特有の形式に変換す ることです。 これらの関数が指定されていない場合、型の内部形式が全ての関連 するマシンアーキテクチャで認識できるものと仮定されます。 例えば、Sun-4 マシンから DECstation に 1 つの文字を渡す場合は 変換する必要はありませんが、他の多くの型では変換が必要です。
PASSEDBYVALUE という省略可能なフラグは、 この型を使用する演算子と関数は参照渡しでは無く、値渡しで引数 を渡さなければならないことを示します。 その内部表現形式が 4 バイト以上の型を値渡しすることができないこ とに注意して下さい。
この節で説明する適切な手法を用いて、新しい基本型用の演算子、 関数、及び、集約を定義することができます。
以下のコマンドは box データ型を作成し、この型を使用したクラ スの定義を行ないます。
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);