CREATE TYPE

Name

CREATE TYPE  --  新しい基本データ型を定義する。

Synopsis

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 ] )
  

入力

typename

作成する型の名前。

internallength

新しい型の内部長を指定する、リテラル値。

externallength

新しい型の外部長を指定する、リテラル値。

input_function

CREATE FUNCTION によって作成された、 外部形式のデータをその型の内部形式に変換する関数の名前。

output_function

CREATE FUNCTION によって作成された、 内部形式のデータを表示に適した形式に変換する関数の名前。

element

作成される型は配列になります。 ここでは配列要素の型を指定します。

delimiter

配列用の区切り文字。

default

"data not present"(データがありません)を示すために表示さ れるデフォルトのテキスト。

send_function

CREATE FUNCTION によって作成された、 この型のデータを他のマシンへの転送に適した形式に変換す る関数の名前。

receive_function

CREATE FUNCTION によって作成された、 この型のデータを他のマシンから内部形式への転送に適した 形式に変換する関数の名前。

出力

CREATE

型の作成が成功した場合に返されるメッセージ。

説明

CREATE TYPE を使用して、ユーザは現在の データベースで使用できる新しいユーザデータ型を Postgres に 登録できます。 型を定義したユーザはその所有者になります。 typename は、その新しい型の名前であり、そのデータベースで定義された 型の中で一意なものでなければなりません。

CREATE TYPE では、型を定義する前に (create 関数を使用して) 2 つの関数を登録する必要があります。 新しい基本型の表現形式は、型の外部表現形式を、その型用に 定義される演算子と関数で使用される内部表現形式に変換する input_function によって決まります。 当然、 output_function はこの逆の変換を行ないます。 この入力用関数と出力用関数はどちらも、 "opaque" 型の引数を 1 つもしくは 2 つ取る ように宣言されなければなりません。

新しい基本型を、 internallength が正の整数となる、固定長として作成することも、Postgres がその型が Postgres の組み込みデータ型 "text" と同じ 形式をとるものと仮定する、可変長として作成することもできます。 型が可変長であることを示すためには、 internallengthVARIABLE に設定して下さい。 外部表現形式も同様に、 externallength キーワードを使用して指定されます。

型が配列であり、型が配列要素を持つことを示すためには、 ELEMENT キーワードを使用して、その配列要素の型を指定 して下さい。 例えば、 4 バイト整数 ("int4") の配列を定義するには、

ELEMENT = int4
と指定して 下さい。

その型の配列で使用される区切り文字を示すために、 delimiter を特別な文字に設定することができます。 デフォルトの区切り文字はカンマ (",") です。

"データが存在しない" ことを意味する何らかの特定のビットパター ンを持たせたい場合、デフォルト値をオプションで指定することが できます。 DEFAULT キーワードを使って、このデフォルト 値を指定して下さい。

省略可能な send_functionreceive_function という引数は、Postgres サービスに要求を送るアプリケーションプ ログラムが異なるマシン上にある場合に使用されます。 この場合、Postgres が動作しているマシンは、リモートマシンで使 われるデータ型の形式と異なる形式を使用する可能性があります。 この場合の適切な方式は、サーバからクライアントに送信する際に データ項目を標準形式に変換し、そして、サーバがクライアントか らデータを受信する際に、標準形式からマシン特有の形式に変換す ることです。 これらの関数が指定されていない場合、型の内部形式が全ての関連 するマシンアーキテクチャで認識できるものと仮定されます。 例えば、Sun-4 マシンから DECstation に 1 つの文字を渡す場合は 変換する必要はありませんが、他の多くの型では変換が必要です。

PASSEDBYVALUE という省略可能なフラグは、 この型を使用する演算子と関数は参照渡しでは無く、値渡しで引数 を渡さなければならないことを示します。 その内部表現形式が 4 バイト以上の型を値渡しすることができないこ とに注意して下さい。

この節で説明する適切な手法を用いて、新しい基本型用の演算子、 関数、及び、集約を定義することができます。

配列型

可変長の配列型の高速作成のために array_in と array_out と いう 2 つの汎用組み込み関数が存在します。 これらの関数は全ての既存の Postgres 型の配列を操作します。

ラージオブジェクト型

"普通の" Postgres の型の大きさは 8192 バイトまでに制限されて います。 より大きな型を必要とする場合、ラージオブジェクト型を作成しな ければなりません。 この型用のインタフェースについては、 PostgreSQL プログラマガイド において 詳細に説明されています。 全てのラージオブジェクト型の大きさは常に VARIABLE です。

以下のコマンドは 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);
   

注意

型の名前はアンダースコア文字 ("_") で始めることができません。 また、名前の長さは31 文字までに制限されています。 これは、Postgres が内部で、ある基本型の配列型を作成する際に、 その基本型名の前にアンダースコアを付与した名前で作成するため です。

既存の型を削除する場合は、 DROP TYPE を参照して下さい。

CREATE FUNCTIONCREATE OPERATOR、及び、 PostgreSQL プログラマガイドのラージ オブジェクトの章も参照して下さい。

互換性

SQL3

CREATE TYPESQL3 文です。