★PostgreSQLカンファレンス2021 11月12日開催/チケット販売中★
他のバージョンの文書 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

51.62. pg_type

pg_typeカタログはデータ型の情報を保存します。 基本型と列挙型(スカラ型)はCREATE TYPEで作成され、ドメインはCREATE DOMAINで作成されます。 複合型がテーブルの行構成を表すためデータベースの個々のテーブルに対して自動的に作成されます。 複合型をCREATE TYPE ASで作成することもできます。

表51.62 pg_type Columns

列 型

説明

oid oid

行識別子

typname name

データ型名

typnamespace oid (references pg_namespace.oid)

この型を含む名前空間のOID

typowner oid (references pg_authid.oid)

型の所有者

typlen int2

固定長型では、typlenは型の内部表現内でのバイト数です。 しかし、可変長型ではtyplenは負です。 -1はvarlena型(最初の4バイトにデータ長を含むもの)を意味し、-2はヌル終端のC言語の文字列を示します。

typbyval bool

typbyvalは内部関数がこの型の値を値渡しか、参照渡しかを決定します。 typlenが1、2、4バイト長(もしくはDatumが8バイトのマシン上では8バイト長)以外であれば、typbyvalを偽にする必要があります。 可変長型は必ず参照渡しになります。 typbyvalは長さが値渡し可能でも偽になり得ることに注意してください。

typtype char

typtypeでは、bは基本型、cは複合型(例えばテーブルの行の型)、dは派生型(ドメインなど)、eは列挙型、pは疑似型、rは範囲型です。 typrelidおよびtypbasetypeも参照してください。

typcategory char

typcategoryは、パーサがどの暗黙のキャストが選択されるべきか決定するのに使用されるデータ型の任意の分類です。 表 51.63を参照してください。

typispreferred bool

型がtypcategory内で選択されたキャスト対象である場合に真です。

typisdefined bool

型が定義されると真、ここが未定義型に対する予備の場所である時は偽。 typisdefinedが偽の場合、型名と名前空間とOID以外は信頼すべきでありません。

typdelim char

配列入力の構文解析をする際にこの型の2つの値を分離する文字。 区切り文字は配列データ型ではなく配列要素データ型に関連付けられることに注意してください。

typrelid oid (references pg_class.oid)

もしこれが複合型(typtypeを参照)であれば、この列は関連するテーブルを定義するpg_class項目を指します。 (独立の複合型の場合、pg_class項目は実際にはテーブルを表しませんが、いずれにしても型のpg_attribute項目をリンクするために必要です。) 複合型でない場合はゼロです。

typelem oid (references pg_type.oid)

typelemがゼロでない場合、これはpg_typeの別の列を特定します。 現在の型は、typelem型の値を生成する配列のように、配列要素を持てるようになります。 本当のの配列型は可変長(typlen = -1)ですが、例えばnamepointのように、いくつかの固定長(typlen > 0)型は同時に非ゼロのtypelemを持つことができます。 もし固定長型がtypelemを持つ場合、その内部表現は他のデータを持たないtypelemデータ型の数個の値でなければなりません。 可変長配列型には配列サブルーチンで定義されたヘッダを持ちます。

typarray oid (references pg_type.oid)

typarrayがゼロでない場合、typarraypg_type内のもうひとつの行を特定します。 もうひとつの行は、この型を要素として持っている本当の配列型です。

typinput regproc (references pg_proc.oid)

入力変換関数(テキスト形式)

typoutput regproc (references pg_proc.oid)

出力変換関数(テキスト形式)

typreceive regproc (references pg_proc.oid)

入力変換関数(バイナリ形式)、なければゼロ

typsend regproc (references pg_proc.oid)

出力変換関数(バイナリ形式)、なければゼロ

typmodin regproc (references pg_proc.oid)

型修飾子の入力関数。型が修飾子をサポートしていない場合はゼロ

typmodout regproc (references pg_proc.oid)

型修飾子の出力関数。標準書式を使用する場合はゼロ

typanalyze regproc (references pg_proc.oid)

独自のANALYZE関数。標準関数を使用する場合はゼロ

typalign char

typalignはこの型の値を格納する際に必要な整列です。 ディスク上での格納だけでなく、PostgreSQL内部の値の表現にも適用されます。 ディスク上の完全な行の表現のように、複数の値が隣接して格納される際には、指定された境界で始まるように、この型のデータの前にパディングが挿入されます。 アライメントの参照先は、連続しているデータ中の先頭のデータの開始位置です。 使用可能な値は以下の通りです。

  • c = char整列(すなわち、整列は必要ありません)。

  • s = short整列(多くのマシンでは2バイトになります)。

  • i = int整列(多くのマシンでは4バイトになります)。

  • d = double整列(多くのマシンでは8バイトになりますが、必ずしもすべてがそうであるとは限りません)。

typstorage char

typstorageは、varlena型(typlen = -1であるもの)において、その型がトーストされる予定であるか、この型においてアトリビュートに対するデフォルトの戦略が何であるかを示します。 可能な値は以下です。

  • p (plain):値は常にplainで格納されなければなりません(非varlena型は常にこの値を使います)。

  • e:値は従属的リレーションに格納できます(リレーションがあるとき。リレーションに関してはpg_class.reltoastrelidを参照してください)。

  • m (main):値は圧縮してインラインで格納できます。

  • x (extended):値は圧縮することもできますし、圧縮した上で更に従属的リレーションに移動することもできます。

トースト可能な型に対してはxが通常の選択です。 m値も、どうしても必要なら従属的格納に移動できることに注意してください(ex値は、まず最初に移動します)。

typnotnull bool

typnotnullは型に対し非NULL制約を表します。 ドメインでのみ使用されます。

typbasetype oid (references pg_type.oid)

もしこれがドメイン(typtypeを参照)であれば、typbasetypeはこれが基づいている型を指定します。 ドメインでない場合はゼロです。

typtypmod int4

ドメインはtyptypmodを使用して、基本型に適用されるtypmodを記録します (基本型がtypmodを使用しない場合は-1)。 この型がドメインでない場合は-1です。

typndims int4

typndimsは配列であるドメインの配列の次元数です (つまり、typbasetypeは配列型です。)。 配列型のドメインでない場合はゼロです。

typcollation oid (references pg_collation.oid)

typcollationは型の照合順序を指定します。 型が照合順序をサポートしない場合、ゼロになります。 照合順序をサポートする基本型はここでゼロ以外の値を持ちます。典型的にはDEFAULT_COLLATION_OIDです。 照合順序の設定可能な型全体のドメインは、そのドメインで照合順序が指定されていれば、基本型とは異なる照合順序OIDを持つことができます。

typdefaultbin pg_node_tree

typdefaultbinがNULLでない場合、これは型のデフォルト式のnodeToString()表現です。 ドメインでのみ使用されます。

typdefault text

関連するデフォルト値を持たない型であればtypdefaultはNULLです。 typdefaultbinがNULLでない場合、typdefaultは、typdefaultbinによって表される人間が見てわかる形式のデフォルト式を含む必要があります。 typdefaultbinがNULLでtypdefaultがNULLでない場合、typdefaultは型のデフォルト値の外部表現です。 これは、定数を生成するために型の入力変換処理に渡されることがあります。

typacl aclitem[]

アクセス権限。 詳細は5.7を参照してください。


注記

固定長型のシステムテーブルでは、pg_typeで定義されているサイズとアライメントと、コンパイラがテーブル行を表現する構造体の中で列を格納する方法とで合意が取れていることが重要です。

表 51.63はシステムで定義されたtypcategoryの値の一覧です。 今後この一覧に追加されるものは同様に大文字のASCII文字になります。 他のすべてのASCII文字はユーザ定義のカテゴリのために予約されています。

表51.63 typcategoryのコード

コードカテゴリ
A配列型
B論理値型
C複合型
D日付時刻型
E列挙型
G幾何学型
Iネットワークアドレス型
N数値型
P仮想型
R範囲型
S文字列型
T時間間隔型
Uユーザ定義型
Vビット列型
Xunknown