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 ]
    [ , ALIGNMENT = alignment ]
    [ , STORAGE = storage ]
)
  

入力

typename

作成する型の名前です。

internallength

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

externallength

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

input_function

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

output_function

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

element

作成されるのは配列型で、その配列の要素の型を指定します。

delimiter

その配列要素の区切り文字です。

default

データ型のデフォルト値です。通常はこれは省略されるので デフォルトは NULL になります。

send_function

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

receive_function

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

alignment

データ型の格納バウンダリの条件です。このオプションが指定された場合、 値は'int4'または'double'である 必要があります。デフォルトは'int4'です。

storage

データ型の格納テクニックです。指定された場合、 'plain'、 'external'、 'extended'、または 'main' でなければなりません。デフォルトは 'plain' です。

出力

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 で 特定の文字を設定します。デフォルトの区切り文字はカンマ (",") です。

ユーザが"データが存在しません"を意味する特定のビットパターンを 望む場合などでは、デフォルト値をオプションで指定することが出来ます。 DEFAULTキーワードでデフォルトを指定します。

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

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

キーワード storage は可変長データ型の格納ストラテジの選択を可能にします (固定長型には plain のみが許されています)。 plain はデータ型に TOAST を使えなくします。 常に一列に格納され圧縮されません。 extended は TOAST の全ての機能を有効にします。 システムはまず長いデータ値を圧縮しようとし、それでもまだ長過ぎる 場合は値をメインテーブルの行から削除します。 external はメインテーブルから値を削除することを 許しますが、システムはそれを圧縮しようとしません。 main は圧縮を許しますが、値をメインテーブル から削除することを止めます。(この格納メソッドを持つデータアイテム は他に行を適合させる方法がない場合は削除されるかもしれませんが、 extendedexternal アイテムより優先して残されます。

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

配列型

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

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

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