43.34. pg_type

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

表 43-34. pg_typeの列

名前参照先説明
typnamename データ型名
typnamespaceoidpg_namespace.oid この型を含む名前空間のOID
typowneroidpg_authid.oid型の所有者
typlenint2  固定長型では、typlenは型の内部表現内でのバイト数です。しかし、可変長型ではtyplenは負となります。 -1は"varlena"型(最初の4バイトにデータ長を含むもの)を意味し、-2はNULL文字で終端するC言語の文字列を示します。
typbyvalbool  typbyvalは内部関数がこの型の値を値渡しか、参照渡しかを決定します。typlenが1、2、4バイト長(もしくはデータが8バイトのマシン上では8バイト長)以外であればtypbyvalを偽にする必要があります。可変長型は必ず参照渡しになります。 typbyvalは長さが値渡し可能でも偽になり得ることに注意してください。現在float4などがこれに該当します。
typtypechar  typtypeは、bは基本型、cは複合型(例えばテーブルの行の型)、dは派生型(ドメインなど)、またpは疑似型となります。typrelidおよびtypbasetypeも参照してください。
typisdefinedbool  型が定義されると真、ここが未定義型に対する予備の場所である時は偽。typisdefinedが偽の場合、型名と名前空間とOID以外は信頼すべきでありません。
typdelimchar 配列入力の構文解析をする際にこの型を持っている2つの値を分離する文字。 区切り文字は配列データ型ではなく配列要素データ型に関連付けられることに注意してください。
typrelidoidpg_class.oid もしこれが複合型(typtypeを参照)であれば、この列は関連するテーブルを定義するpg_classのエントリを指します(独立の複合型の場合、pg_classのエントリは実際にはテーブルを表しませんが、いずれにしても型のpg_attributeのエントリをリンクするために必要です)。複合型でない場合はゼロです。
typelemoidpg_type.oid typelemが0でない場合、typelemはpg_typeの別の列を特定します。現在の型はそこで配列のように、typelem型の値を放棄し、配列要素を持てるようになります。"真"の配列型は可変長(typlen = -1)ですが、例えばnamepointのように、いくつかの固定長(typlen > 0)型も同時にゼロでないtypelemを持つことができます。もし固定長型がtypelemを持っている場合その内部表現は他のデータを持たないtypelemデータ型の何らかの値でなければなりません。可変長配列型には配列サブルーチンで定義されたヘッダがあります。
typinputregprocpg_proc.oid入力変換関数(テキスト形式)
typoutputregprocpg_proc.oid出力変換関数(テキスト形式)
typreceiveregprocpg_proc.oid入力変換関数(バイナリ形式)、なければ0
typsendregprocpg_proc.oid出力変換関数(バイナリ形式)、なければ0
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:値は圧縮されたinlineに格納することができます。

  • x:値は圧縮されたinlineもしくは"従属"に格納することができます。

m列も補助記憶に移すことができますが、最後の切札としてでなければいけません(ex列が先に移動されます)。

typnotnullbool 

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

typbasetypeoidpg_type.oid

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

typtypmodint4 

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

typndimsint4 

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

typdefaultbintext 

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

typdefaulttext 

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