pg_class
#
pg_class
カタログは、テーブルとその他に列を持つもの、あるいはテーブルに類似したオブジェクトを記述します。
その中にはインデックス(pg_index
も参照)、シーケンス(pg_sequence
も参照)、ビュー、マテリアライズドビュー、複合型およびTOASTテーブルが含まれます。
relkind
を参照してください。
これより以降、「リレーション」と記されている場合はこれらすべてのオブジェクトを意味しています。
pg_class
のすべての列がすべてのリレーション種別にとって意味を持つわけではありません。
表53.11 pg_class
の列
列 型 説明 |
---|
行識別子 |
テーブル、インデックス、ビューなどの名前 |
このリレーションを持つ名前空間のOID |
このテーブルの行の型に対応するデータ型のOID。ゼロならば、 |
型付けされたテーブルでは背後にある複合型のOID。 その他のリレーションではゼロ |
リレーションの所有者 |
これがテーブルあるいはインデックスの場合は、それに使われている(ヒープ、B-tree、ハッシュなどの)アクセスメソッド。 そうでなければ、ゼロ(シーケンスおよびビューのように格納場所を持たないリレーションではゼロになります)。 |
このリレーションのディスク上のファイルの名前です。 ゼロはディスク上のファイル名が低レベルな状態で決定される「マップ付けされた」リレーションであることを意味します。 |
このリレーションが格納されるテーブル空間。 ゼロの場合、データベースのデフォルトのテーブル空間が暗黙的に使用されます。 ディスク上にファイルがないリレーションの場合は、パーティションテーブルの場合を除き、意味がありません。 パーティションテーブルの場合、作成コマンドでテーブル空間が指定されていない場合にパーティションが作成されるテーブル空間です。 |
このテーブルのディスク上表現のページ単位( |
テーブル内の生きている行数。
これはプランナで使用される単なる推測値です。
|
テーブル内の可視マップ内で全て可視とマークされているページ数。
これはプランナで使用される単なる見積です。
|
このテーブルに関連しているTOASTテーブルのOID。 何もない場合はゼロ。 TOASTテーブルは「行に収まらない」大きい属性を副テーブルに格納します。 |
テーブルであり、かつ、インデックスを持つ(あるいはつい最近まで持っていた)場合はtrue |
クラスタ内の全てのデータベースにわたってこのテーブルが共有されている場合はtrue。
( |
|
|
リレーションにあるユーザ列数(システム列は含みません)。
|
テーブル上の |
テーブルにルールがある(あるいは以前あった)場合はtrue。
|
テーブルにトリガがある(あるいは以前あった)場合はtrue。
|
テーブルあるいはインデックスが子テーブルあるいはパーティションに継承されている(または以前に継承されていた)場合はtrue |
行単位セキュリティが有効なテーブルの場合はtrue。
|
行単位セキュリティが(有効にされているとして)テーブルの所有者にも適用される場合はtrue。
|
リレーションにデータが投入されている場合はtrue(マテリアライズドビュー以外のすべてのリレーションではtrueです) |
行に「replica identity」フォームを使った列:
|
テーブルあるいはインデックスがパーティションである場合はtrue |
テーブルの書き換えが必要なDDL操作中に書き込みが行われる新しいリレーションでは、これは元のリレーションのOIDを持ちます。 そうでなければゼロです。 この状態は内部的にのみ可視です。 このフィールドはユーザから見えるリレーションではゼロ以外を持つべきではありません。 |
この値より以前のトランザクションIDはすべて、このテーブルで永続的な(「凍結された」)トランザクションIDに置き換えられています。
これは、このテーブルに対して、トランザクションID周回を防ぎ、かつ、 |
このテーブル内のトランザクションIDによって置換される前のすべてのマルチトランザクションID。
これは、マルチトランザクションIDのID周回を防ぐ、または |
アクセス権限。 詳細は5.7を参照してください |
「keyword=value」文字列のような、アクセスメソッド特有のオプション |
テーブルがパーティションの場合( |
pg_class
内の複数の論理型フラグは、ゆっくりと保守されます。
正しい状態にあるときにtrueであることが保証されていますが、その条件がtrueでなくなった時即座にfalseに再設定されないかもしれません。
例えばrelhasindex
はCREATE INDEX
で設定されますが、DROP INDEX
では決して初期化されません。
代わりにVACUUM
がそのテーブルにインデックスがないことを判定した場合にrelhasindex
を初期化します。
この調整により競合状態を防止し、同時実行性が向上します。