50.55. pg_type

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

表50.55 pg_typeの列

名前参照先説明
oidoid 行識別子(隠し属性です。明示的に選択しなければなりません)
typnamename データ型名
typnamespaceoidpg_namespace.oid この型を含む名前空間のOID
typowneroidpg_authid.oid型の所有者
typlenint2 固定長型では、typlenは型の内部表現内でのバイト数です。 しかし、可変長型ではtyplenは負となります。 -1はvarlena型(最初の4バイトにデータ長を含むもの)を意味し、-2はヌル終端のC言語の文字列を示します。
typbyvalbool typbyvalは内部関数がこの型の値を値渡しか、参照渡しかを決定します。 typlenが1、2、4バイト長(もしくはDatumが8バイトのマシン上では8バイト長)以外であれば、typbyvalを偽にする必要があります。 可変長型は必ず参照渡しになります。 typbyvalは長さが値渡し可能でも偽になり得ることに注意してください。
typtypechar typtypeでは、bは基本型、cは複合型(例えばテーブルの行の型)、dは派生型(ドメインなど)、eは列挙型、pは疑似型、rは範囲型となります。 typrelidおよびtypbasetypeも参照してください。
typcategorychar typcategoryは、パーサがどの暗黙のキャストが選択されるべきか決定するのに使用されるデータ型の任意の分類です。 表50.56「typcategoryのコード」を参照してください。
typispreferredbool 型がtypcategory内で選択されたキャスト対象である場合に真となります。
typisdefinedbool 型が定義されると真、ここが未定義型に対する予備の場所である時は偽。 typisdefinedが偽の場合、型名と名前空間とOID以外は信頼すべきでありません。
typdelimchar 配列入力の構文解析をする際にこの型の2つの値を分離する文字。 区切り文字は配列データ型ではなく配列要素データ型に関連付けられることに注意してください。
typrelidoidpg_class.oidもしこれが複合型(typtypeを参照)であれば、この列は関連するテーブルを定義するpg_class項目を指します。 (独立の複合型の場合、pg_class項目は実際にはテーブルを表しませんが、いずれにしても型のpg_attribute項目をリンクするために必要です。) 複合型でない場合はゼロです。
typelemoidpg_type.oidtypelemがゼロでない場合、これはpg_typeの別の列を特定します。 現在の型は、typelem型の値を生成する配列のように、配列要素を持てるようになります。 本当のの配列型は可変長(typlen = -1)ですが、例えばnamepointのように、いくつかの固定長(typlen > 0)型は同時に非ゼロのtypelemを持つことができます。 もし固定長型がtypelemを持つ場合、その内部表現は他のデータを持たないtypelemデータ型の数個の値でなければなりません。 可変長配列型には配列サブルーチンで定義されたヘッダを持ちます。
typarrayoidpg_type.oidtyparrayがゼロでない場合、typarraypg_type内のもうひとつの行を特定します。 もうひとつの行は、この型を要素として持っている本当の配列型です。
typinputregprocpg_proc.oid入力変換関数(テキスト形式)
typoutputregprocpg_proc.oid出力変換関数(テキスト形式)
typreceiveregprocpg_proc.oid入力変換関数(バイナリ形式)、なければゼロ
typsendregprocpg_proc.oid出力変換関数(バイナリ形式)、なければゼロ
typmodinregprocpg_proc.oid型修飾子の入力関数。型が修飾子をサポートしていない場合はゼロ
typmodoutregprocpg_proc.oid型修飾子の出力関数。標準書式を使用する場合はゼロ
typanalyzeregprocpg_proc.oid独自のANALYZE関数。標準関数を使用する場合はゼロ
typalignchar 

typalignはこの型の値を格納する際に必要な整列です。 ディスクに書き込む時やほとんどのPostgreSQL内の値を表現するために使用されます。 ディスクに完全な列を格納する時など、いくつかの値が連続して格納される際、境界を特定するためにこの型のデータの前にパッドが挿入されます。 整列参照はシーケンスの一番最初にあります。

使用可能な値は以下の通りです。

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

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

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

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

注記

システムテーブルで使用されている型については、pg_typeシステムカタログで定義されている大きさと整列は、コンパイラがテーブルの行を表現する構造体に対して位置決めを行うものと厳密に一致することを求められています。

typstoragechar 

typstorageは、varlena型(typlen = -1のもの)に対して型がTOASTに対応しているか、また、この型の属性のデフォルト戦略が何であるべきかを伝えます。 使用可能な値は以下の通りです。

  • p:値は必ずそのまま格納されなければいけません。

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

  • m:値は圧縮されたインラインに格納することができます。

  • x:値は圧縮されたインラインもしくは従属格納領域に格納することができます。

m列も従属格納領域に移すことができますが、最後の切札としてでなければいけません(ex列が先に移動されます)。

typnotnullbool 

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

typbasetypeoidpg_type.oid

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

typtypmodint4 

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

typndimsint4 

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

typcollationoidpg_collation.oid

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

typdefaultbinpg_node_tree 

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

typdefaulttext 

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

typaclaclitem[] アクセス特権。詳細はGRANTREVOKEを参照してください。

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

表50.56 typcategoryのコード

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