53.11. pg_class #

pg_classカタログはテーブルと、その他に列を持つもの、あるいはテーブルに似た全てのものを目録にしています。 その中にはインデックス(pg_indexも参照)、シーケンス(pg_sequenceも参照)、ビュー、マテリアライズドビュー、複合型およびTOASTテーブルが含まれます。 relkindを参照してください。 これより以降、リレーションと記されている場合はこれらすべてのオブジェクトを意味しています。 すべての列が全てのリレーションの型に該当するとは限りません。

表53.11 pg_classの列

列 型

説明

oid oid

行識別子

relname name

テーブル、インデックス、ビューなどの名前

relnamespace oid (参照先 pg_namespace.oid

このリレーションを持つ名前空間のOID

reltype oid (参照先 pg_type.oid

このテーブルの行の型に対応するデータ型のOID。ゼロならば、pg_typeエントリを持たないインデックス、シーケンス、TOASTテーブル。

reloftype oid (参照先 pg_type.oid

型付けされたテーブルでは背後にある複合型のOID。 その他のリレーションではゼロ

relowner oid (参照先 pg_authid.oid

リレーションの所有者

relam oid (参照先 pg_am.oid

これがテーブルあるいはインデックスの場合は、それに使われている(ヒープ、B-tree、ハッシュなどの)アクセスメソッド。 そうでなければ、ゼロ(シーケンスおよびビューのように格納場所を持たないリレーションではゼロになります)。

relfilenode oid

このリレーションのディスク上のファイルの名前です。 ゼロはディスク上のファイル名が低レベルな状態で決定されるマップ付けされたリレーションであることを意味します。

reltablespace oid (参照先 pg_tablespace.oid

このリレーションが保存されているテーブル空間。 もしゼロならば、このデータベースのデフォルトテーブル空間を意味します。 (リレーションがディスク上のファイルになくても、問題はありません。)

relpages int4

このテーブルのディスク上表現のページ単位(BLCKSZ)のサイズ。 これはプランナで使用される単なる推測値です。 VACUUMANALYZEおよびCREATE INDEXコマンドなどの一部のDDLコマンドで更新されます。

reltuples float4

テーブル内の生きている行数。 これはプランナで使用される単なる推測値です。 VACUUMANALYZECREATE INDEXなどの一部のDDLコマンドで更新されます。 テーブルにまだVACUUMやANALYZEが行われていなければ、reltuplesには行数が未知であることを示す-1が入ります。

relallvisible int4

テーブル内の可視マップ内で全て可視とマークされているページ数。 これはプランナで使用される単なる見積です。 VACUUMANALYZECREATE INDEXなどの一部のDDLコマンドで更新されます。

reltoastrelid oid (参照先 pg_class.oid

このテーブルに関連しているTOASTテーブルのOID。 何もない場合はゼロ。 TOASTテーブルは行に収まらない大きい属性を副テーブルに格納します。

relhasindex bool

テーブルであり、かつ、インデックスを持つ(あるいはつい最近まで持っていた)場合はtrue

relisshared bool

クラスタ内の全てのデータベースにわたってこのテーブルが共有されている場合はtrue。 (pg_databaseのような)ある特定のシステムカタログのみ共有されます。

relpersistence char

p = 永続テーブル/シーケンス、 u = ログを取らないテーブル/シーケンス、 t = 一時テーブル/シーケンス

relkind char

r = 通常のテーブル、 i = インデックス、 S = シーケンス、 t = TOASTテーブル、 v = ビュー、 m = マテリアライズドビュー、 c = 複合型、 f = 外部テーブル、 p = パーティションテーブル、 I = パーティションインデックス

relnatts int2

リレーションにあるユーザ列数(システム列は含みません)。 pg_attributeにこれに対応する数多くの項目があるはずです。 pg_attribute.attnumも参照してください。

relchecks int2

テーブル上のCHECK制約の数。 pg_constraintカタログを参照してください

relhasrules bool

テーブルにルールがある(あるいは以前あった)場合はtrue。 pg_rewriteカタログを参照してください

relhastriggers bool

テーブルにトリガがある(あるいは以前あった)場合はtrue。 pg_triggerカタログを参照してください

relhassubclass bool

テーブルあるいはインデックスが子テーブルあるいはパーティションに継承されている(または以前に継承されていた)場合はtrue

relrowsecurity bool

行単位セキュリティが有効なテーブルの場合はtrue。 pg_policyカタログを参照してください

relforcerowsecurity bool

行単位セキュリティが(有効にされているとして)テーブルの所有者にも適用される場合はtrue。 pg_policyカタログを参照してください

relispopulated bool

リレーションにデータが投入されている場合はtrue(マテリアライズドビュー以外のすべてのリレーションではtrueです)

relreplident char

行にreplica identityフォームを使った列: d = デフォルト(もしあれば主キー)、 n = 無し、 f = 全ての列、 i = インデックスと indisreplidentのセット(使用されていたインデックスが削除されていた場合は、無し、と同様)

relispartition bool

テーブルあるいはインデックスがパーティションである場合はtrue

relrewrite oid (参照先 pg_class.oid

テーブルの書き換えが必要なDDL操作中に書き込みが行われる新しいリレーションでは、これは元のリレーションのOIDを持ちます。 そうでなければゼロです。 この状態は内部的にのみ可視です。 このフィールドはユーザから見えるリレーションではゼロ以外を持つべきではありません。

relfrozenxid xid

この値より以前のトランザクションIDはすべて、このテーブルで永続的な(凍結された)トランザクションIDに置き換えられています。 これは、このテーブルに対して、トランザクションID周回を防ぎ、かつ、pg_xactを縮小させることを目的としたバキュームを行うかどうかを追跡するために使用されます。 リレーションがテーブルではない場合はゼロ(InvalidTransactionId)です。

relminmxid xid

このテーブル内のトランザクションIDによって置換される前のすべてのマルチトランザクションID。 これは、マルチトランザクションIDのID周回を防ぐ、またはpg_multixactを縮小させるために、テーブルをバキュームする必要があるかどうかを追跡するために使用されます。 リレーションがテーブルではない場合はゼロ(InvalidMultiXactId)です。

relacl aclitem[]

アクセス権限。 詳細は5.7を参照してください

reloptions text[]

keyword=value文字列のような、アクセスメソッド特有のオプション

relpartbound pg_node_tree

テーブルがパーティションの場合(relispartition参照)のパーティション境界の内部表現


pg_class内の複数の論理型フラグは、ゆっくりと保守されます。 正しい状態にあるときにtrueであることが保証されていますが、その条件がtrueでなくなった時即座にfalseに再設定されないかもしれません。 例えばrelhasindexCREATE INDEXで設定されますが、DROP INDEXでは決して初期化されません。 代わりにVACUUMがそのテーブルにインデックスがないことを判定した場合にrelhasindexを初期化します。 この調整により競合状態を防止し、同時実行性が向上します。