43.29. pg_type

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

表 43-29. pg_type Columns

名前参照先説明
typnamename データ型名
typnamespaceoidpg_namespace.oid この型を含む名前空間の OID
typownerint4pg_shadow.usesysid型の所有者
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)ですが、例えば nameoidvector の様に、いくつかの固定長(typlen > 0)型も同時にゼロでない typelem を持つことができます。もし固定長型が typelem を持っている場合その内部表現は他のデータを持たない typelem データ型のなんらかの値でなければなりません。可変長配列型には配列サブルーチンで定義されたヘッダーがあります。
typinputregprocpg_proc.oid入力変換関数(テキスト形式)
typoutputregprocpg_proc.oid出力変換関数(テキスト形式)
typreceiveregprocpg_proc.oid入力変換関数(バイナリ形式)、なければ 0
typsendregprocpg_proc.oid出力変換関数(バイナリ形式)、なければ 0
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 は型のデフォルト値の外部表現です。これは、定数を生成するために型の入力変換処理に渡されることがあります。