CREATE TYPE

Name

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

Synopsis

CREATE TYPE typename (
        INPUT          = input_function
      , OUTPUT         = output_function
      , INTERNALLENGTH = (internallength | VARIABLE)
    [ , EXTERNALLENGTH = (externallength | VARIABLE) ]
    [ , ELEMENT        = element ]
    [ , DELIMITER      = delimiter ]
    [ , DEFAULT        = "default" ]
    [ , SEND           = send_function ]
    [ , RECEIVE        = receive_function ]
    [ , PASSEDBYVALUE ]
)
  

入力

typename

作成される型の名前です。

INTERNALLENGTH internallength

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

EXTERNALLENGTH externallength

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

INPUT input_function

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

OUTPUT 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 FUNCTION を用いて)二つの関数を登録する必要があります。 新しい基本型の表現は input_function で決定され、型の外部表現を、その型に対して定義された演算子と 関数が使用可能となる内部表現に変換されます。当然、 output_function は 逆変換を実行します。入力と出力の関数は共に、型 "opaque" の一つまたは二つの引数を取るように 宣言されなければなりません。

新しい基本型は、固定長の場合 internallength が 正の整数で、可変長の場合はその新しい型が Postgres が提供する データ型 "text" と同じ形式であると Postgres は推定します。 型が可変長であることを示すには、 internallengthVARIABLE に設定します。 その外部表現は、 externallength キーワードを使用して同じように指定されます。

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

ELEMENT = int4
を指定 します。

この型の配列に使用するデリミタを示すには、 delimiter で 特定の文字を設定します。デフォルトのデリミタはコンマ (",") です。

ユーザが "data not present" (データがありませんの表示)を意味する 特定のビットパターンを望むのであれば、デフォルト値をオプションで 指定することが出来ます。 DEFAULT キーワードでデフォルトを指定します。

アプリケーションプログラムが、Postgres サービスが別のマシン 上で動いている事を想定している場合、オプションの関数、 send_function および receive_function を使用します。この場合、Postgres が動いているマシンは、 遠隔マシンで使用されているものと異なる型形式を使用することが できます。そして、サーバからクライアントに送る時はデータ項目を 標準形式に変換し、クライアントからサーバがデータを受け取る時 は、標準形式からマシン固有の形式に変換することが適切な処理 です。これらの関数が指定されていない場合、すべてのこの件に 関連したマシンのアーキテクチャが、その型の内部形式を認識できる と推測します。例えば、他の多くの型では必要とされる、Sun-4 から DECstation に送られる一文字は変換される必要がありません。

オプションのフラグ、PASSEDBYVALUE は、 引数が参照によってではなく、値として渡されなければならない データ型を使用する演算子と関数であることを示します。 内部表現が 4 バイト以上の値の型を渡してはならないことに 注意して下さい。

新しい基本型に対し、ユーザはこの節で記述した適切な手法で 演算子、関数および集約を定義することができます。

配列型

二つの一般化された組み込み関数、array_in と array_out により 可変長配列型がすぐに作成可能です。これらの関数はいかなる 既存の Postgres 型による配列の上でも動きます。

ラージオブジェクト型

"通常" の Postgres 型は 8192 バイトまでに限られています。 これより大きい型が必要な場合は、ラージオブジェクト型を 作成しなければなりません。これらの型に対してのインターフェイス は、PostgreSQL プログラマガイド に すべて記述されています。 ラージオブジェクト型の長さは常に VARIABLE です。

事例

このコマンドはボックスデータ型を作成し、その型をクラス 定義の中で使用します:

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 文です。