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 を用いて)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 バイト以上の型を値で渡 すことができないことに注意してください。
キーワード storage を 使用することで、可変長データ型を格納する際の戦略を選択することがで きます。 (固定長の型には plain のみが許されています)。 plain はデータ型に対して TOAST を使えなくします。 データは常に一列で格納され、圧縮されません。 extended は TOAST の全ての機能を有効にします。 システムはまず長いデータ値を圧縮しようとし、それでもまだ長過ぎる 場合は値をメインテーブルの行から削除します。 external はメインテーブルから値を削除することを 許しますが、システムはデータを圧縮しようとしません。 main はデータの圧縮を許しますが、値をメインテーブル から削除することを止めます。(この格納メソッドを持つデータアイテム は、他に行を適合させる方法がない場合にはメインテーブルから削除されてし まうかもしれませんが、extended や external が指定されているアイテムよりも優先して メインテーブルに残されます。)
新しい基本型に対して、この節で記述した適切な手法で演算子、 関数、および集約を定義することができます。
以下のコマンドは、 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);