★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 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

52.62. pg_type

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

表52.62 pg_typeの列

列 型

説明

oid oid

行識別子

typname name

データ型名

typnamespace oid (参照先 pg_namespace.oid

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

typowner oid (参照先 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は範囲型、mは多重範囲型です。 typrelidおよびtypbasetypeも参照してください。

typcategory char

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

typispreferred bool

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

typisdefined bool

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

typdelim char

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

typrelid oid (参照先 pg_class.oid

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

typsubscript regproc (参照先 pg_proc.oid

添字ハンドラ関数のOID、あるいはこの型が添え字付けをサポートしていなければゼロ。 本当の配列型では、typsubscript = array_subscript_handlerとなります。 しかし、他の型では特別な添え字付けの振る舞いを実装するハンドラ関数を持つかもしれません。

typelem oid (参照先 pg_type.oid

typelemがゼロでない場合、これは添字付けによって生成された型を定義するpg_typeの別の列を特定します。 typsubscriptがゼロなら、これはゼロとなるはずです。 しかし、添字付けの結果型を決定するためにハンドラがtypelemを必要としてなければ、typsubscriptがゼロでなくても、ゼロとなることがあります。 typelem依存性は、この型の要素型を物理的に含むことを暗示すると考えられることに注意してください。 ですからこの要素型に対するDDL変更は、この型に存在に制限されるかもしれません。

typarray oid (参照先 pg_type.oid

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

typinput regproc (参照先 pg_proc.oid

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

typoutput regproc (参照先 pg_proc.oid

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

typreceive regproc (参照先 pg_proc.oid

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

typsend regproc (参照先 pg_proc.oid

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

typmodin regproc (参照先 pg_proc.oid

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

typmodout regproc (参照先 pg_proc.oid

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

typanalyze regproc (参照先 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 (参照先 pg_type.oid

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

typtypmod int4

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

typndims int4

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

typcollation oid (参照先 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で定義されているサイズとアライメントと、コンパイラがテーブル行を表現する構造体の中で列を格納する方法とで合意が取れていることが重要です。

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

表52.63 typcategoryのコード

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