pg_type

PostgreSQL 8.0.0 文書
前のページ | 巻戻し | 第 41章システムカタログ | 早送り | 次のページ

# 41.30. `pg_type`

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

表 41-30. `pg_type` の列

名前 | 型 | 参照先 | 説明
--- | --- | --- | ---
`typname` | `name` |  | データ型名
`typnamespace` | `oid` | ``pg_namespace`.oid` | この型を含む名前空間の OID
`typowner` | `int4` | ``pg_shadow`.usesysid` | 型の所有者
`typlen` | `int2` |  | 固定長型では、`typlen` は型の内部表現内でのバイト数です。しかし、可変長型では `typlen` は負となります。 -1 は "varlena" 型（最初の 4 バイトにデータ長を含むもの）を意味し、-2 は NULL 文字で終端する C 言語の文字列を示します。
`typbyval` | `bool` |  | `typbyval` は内部関数がこの型の値を値渡しか、参照渡しかを決定します。`typlen` が 1、2、4 バイト長（もしくはデータが 8 バイトのマシン上では 8 バイト長）以外であれば `typbyval` を僞にする必要があります。可変長型は必ず参照渡しになります。 `typbyval` は長さが値渡し可能でも偽になり得ることに注意してください。現在 `float4` などがこれに該当します。
`typtype` | `char` |  | `typtype` は、`b` は基本型、`c` は複合型（たとえばテーブルの行の型）、`d` は派生型(ドメインなど)、また `p` は擬似型となります。`typrelid` および `typbasetype` も参照してください。
`typisdefined` | `bool` |  | 型が定義されると真、ここが未定義型に対する予備の場所であるときは偽。`typisdefined` が偽の場合、型名と名前空間と OID 以外は信頼すべきでありません。
`typdelim` | `char` |  | 配列入力の構文解析をする際にこの型を持っている 2 つの値を分離する文字。 区切り文字は配列データ型ではなく配列要素データ型に関連づけられることに注意してください。
`typrelid` | `oid` | ``pg_class`.oid` | もしこれが複合型 （`typtype` を参照）であれば、この列は関連するテーブルを定義する `pg_class` のエントリを指します。（独立の複合型の場合、`pg_class` のエントリは実際にはテーブルを表しませんが、いずれにしても型の `pg_attribute` のエントリをリンクするために必要です。）複合型でない場合はゼロです。
`typelem` | `oid` | ``pg_type`.oid` | `typelem` が 0 でない場合、typelem は `pg_type` の別の列を特定します。現在の型はそこで配列のように、`typelem` 型の値を放棄し、配列要素を持てるようになります。"真"の配列型は可変長（`typlen` = -1）ですが、例えば `name` と `oidvector` の様に、いくつかの固定長（`typlen` > 0）型も同時にゼロでない `typelem` を持つことができます。もし固定長型が `typelem` を持っている場合その内部表現は他のデータを持たない `typelem` データ型のなんらかの値でなければなりません。可変長配列型には配列サブルーチンで定義されたヘッダーがあります。
`typinput` | `regproc` | ``pg_proc`.oid` | 入力変換関数（テキスト形式）
`typoutput` | `regproc` | ``pg_proc`.oid` | 出力変換関数（テキスト形式）
`typreceive` | `regproc` | ``pg_proc`.oid` | 入力変換関数（バイナリ形式）、なければ 0
`typsend` | `regproc` | ``pg_proc`.oid` | 出力変換関数（バイナリ形式）、なければ 0
`typanalyze` | `regproc` | ``pg_proc`.oid` | カスタムANALYZE関数。もしくは標準関数を使用するとゼロ
`typalign` | `char` |  | `typalign` はこの型の値を格納する際に必要なアライメント（調整項目）です。ディスクに書き込む時とかほとんどの PostgreSQL 内の値を表現するのに使用されます。ディスクに完全な列を格納するときなど、いくつかの値が連続して格納される際、境界を特定するためにこの型のデータの前にパッドが挿入されます。アライメント参照はシーケンスの一番最初にあります。 使用可能な値は以下のとおりです。 `c` = `char` アライメント（すなわち、アライメントは必要ありません）。 `s` = `short` アライメント（多くのマシンでは 2 バイトになります）。 `i` = `int` アライメント（多くのマシンでは 4 バイトになります）。 `d` = `double` アライメント（多くのマシンでは 8 バイトになりますが、必ずしも全てがそうであるとは限りません）。 注意: システムテーブルで使用されている型については、`pg_type` システムカタログで定義されている大きさとアライメントがコンパイラがテーブルの行を表現する構造体に対して位置決めを行なうものと厳密に合致することを求められています。
`typstorage` | `char` |  | `typstorage` は、varlena 型（`typlen` = -1 のもの）に対して型が TOAST に対応しているか、また、この型の属性のデフォルト手順が何であるべきかを伝えます。使用可能な値は以下のとおりです。 `p`: 値は必ず簡潔な状態で格納されなければいけません。 `e`: 値は"従属的"リレーションに格納できます（リレーションに関しては `pg_class.reltoastrelid` を参照してください）。 `m`: 値は圧縮された inline に格納することができます。 `x`: 値は圧縮された、inline もしくは"従属"に格納することができます。 `m` 列も補助記憶に移すことができますが、最後の切札としてでなければいけません（`e` と `x` 列が先に移動されます）。
`typnotnull` | `bool` |  | `typnotnull` は型に対し NOT NULL 制約を表します。ドメインでのみ使用されます。
`typbasetype` | `oid` | ``pg_type`.oid` | もしこれがドメイン（`typtype` を参照）であれば、`typbasetype` はこれが基づいている型を指定します。ドメインでない場合はゼロです。
`typtypmod` | `int4` |  | ドメインは `typtypmod` を使用して、基本型に適用される `typmod` を記録します（基本型が `typmod` を使用しない場合は -1）。この型がドメインでない場合は -1 です。
`typndims` | `int4` |  | `typndims` は配列であるドメインの配列の次元数です（つまり、`typbasetype` は配列型です。ドメインの `typelem` は基本型の `typelem` と一致します）。配列のドメインでない場合はゼロです。
`typdefaultbin` | `text` |  | `typdefaultbin` が NULL でない場合、これは型のデフォルト式の `nodeToString()` 表現形式です。ドメインでのみ使用されます。
`typdefault` | `text` |  | 関連するデフォルト値を持たない型であれば `typdefault` は NULL です。`typdefaultbin` が NULL でない場合、`typdefault` は、`typdefaultbin` によって表される人間が見て分かる形式のデフォルト式を含む必要があります。`typdefaultbin` が NULL で `typdefault` が NULL でない場合、`typdefault` は型のデフォルト値の外部表現です。これは、定数を生成するために型の入力変換処理に渡されることがあります。

前のページ | ホーム | 次のページ
`pg_trigger` | 上に戻る | システムビュー