pg_class カタログは、列を持つテーブルおよびテーブルと同様の性質を有するその他のすべてのオブジェクトを記述します。これにはインデックス(pg_index も参照)、シーケンス(pg_sequence も参照)、ビュー、マテリアライズドビュー、複合型、TOAST テーブルが含まれ、これらは総称して「リレーション」と呼ばれます。すべての列がすべての種類のリレーションで意味を持つわけではありません。
| 列 | 型 | 説明 |
|---|---|---|
oid | oid | 行識別子。 |
relname | name | テーブル、インデックス、ビューなどの名前。 |
relnamespace | oid(pg_namespace.oid を参照) | このリレーションを含む名前空間の OID。 |
reltype | oid(pg_type.oid を参照) | このテーブルの行型に対応するデータの型の OID(存在する場合)。インデックス、シーケンス、TOAST テーブルについてはゼロであり、これらには pg_type のエントリがありません。 |
reloftype | oid(pg_type.oid を参照) | 型付きテーブルの場合、基盤となる複合型の OID。その他のリレーションについてはゼロ。 |
relowner | oid(pg_authid.oid を参照) | リレーションの所有者。 |
relam | oid(pg_am.oid を参照) | テーブルおよびインデックスの場合、使用されるアクセスメソッド(ヒープ、B ツリー、ハッシュなど)。シーケンスおよびストレージを持たないリレーション(例:ビュー)についてはゼロ。 |
relfilenode | oid | このリレーションのディスク上ファイル名。ゼロの場合は、「マップされた」リレーションであり、ディスク上のファイル名は低レベルの状態によって決定されます。 |
reltablespace | oid(pg_tablespace.oid を参照) | このリレーションが格納されている表領域。ゼロの場合は、データベースのデフォルト表領域が適用されます。リレーションにディスク上のファイルがない場合は、この値は意味を持ちません。 |
relpages | int4 | このテーブルのディスク上表現サイズ(ページ単位、ページサイズは BLCKSZ)。これはプランナーで使用される推定値であり、VACUUM、ANALYZE、CREATE INDEX などの一部の DDL コマンドによって更新されます。 |
reltuples | float4 | テーブル内の有効な行数。これはプランナーで使用される推定値であり、VACUUM、ANALYZE、CREATE INDEX などの一部の DDL コマンドによって更新されます。-1 は、テーブルが一度も VACUUM または ANALYZE 実行されていないため、行数が不明であることを示します。 |
relallvisible | int4 | テーブルの可視性マップで「すべて可視」とマークされたページ数。これはプランナーで使用される推定値であり、VACUUM、ANALYZE、CREATE INDEX などの一部の DDL コマンドによって更新されます。 |
reltoastrelid | oid(pg_class.oid を参照) | このテーブルに関連付けられた TOAST テーブルの OID。関連する TOAST テーブルがない場合はゼロ。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 に同数存在する必要があります。 |
relchecks | int2 | テーブル上のチェック制約の数。詳細については、「pg_constraint」をご参照ください。 |
relhasrules | bool | テーブルに(またはかつて)ルールが存在する場合に true になります。詳細については、「pg_rewrite」をご参照ください。 |
relhastriggers | bool | テーブルに(またはかつて)トリガーが存在する場合に true になります。詳細については、「pg_trigger」をご参照ください。 |
relhassubclass | bool | テーブルまたはインデックスに(またはかつて)継承子が存在する場合に true になります。 |
relrowsecurity | bool | テーブルで行レベルセキュリティが有効になっている場合に true になります。 |
relforcerowsecurity | bool | 行レベルセキュリティが有効な場合に、テーブルの所有者にも適用される場合に true になります。 |
relispopulated | bool | リレーションがポピュレート済みである場合に true になります。これは、一部のマテリアライズドビュー以外のすべてのリレーションで true です。 |
relreplident | char | 行のレプリカ ID を構成するために使用される列:d = デフォルト(プライマリキー(存在する場合))、n = なし、f = すべての列、i = indisreplident が設定されたインデックス(そのインデックスが削除されている場合は「なし」と同じ)。 |
relispartition | bool | テーブルまたはインデックスがパーティションである場合に true になります。 |
relrewrite | oid(pg_class.oid を参照) | テーブルの再書き込みを必要とする DDL 操作中、新規に書き込まれるリレーションについて元のリレーションの OID を保持します。それ以外の場合はゼロです。この状態は内部でのみ可視であり、ユーザが可視なリレーションでは、このフィールドは常にゼロである必要があります。 |
relfrozenxid | xid | このテーブルにおいて、このトランザクション ID より前のすべてのトランザクション ID が永続的な(「フローズン」)トランザクション ID に置き換えられています。トランザクション ID のラップアラウンドを防ぐため、または pg_xact のサイズを縮小するために、テーブルの VACUUM 実行が必要かどうかを追跡するために使用されます。リレーションがテーブルでない場合はゼロ(InvalidTransactionId)です。 |
relminmxid | xid | このテーブルにおいて、このマルチトランザクション ID より前のすべてのマルチトランザクション ID がトランザクション ID に置き換えられています。マルチトランザクション ID のラップアラウンドを防ぐため、または pg_multixact のサイズを縮小するために、テーブルの VACUUM 実行が必要かどうかを追跡するために使用されます。リレーションがテーブルでない場合はゼロ(InvalidMultiXactId)です。 |
relacl | aclitem[] | アクセス権限。 |
reloptions | text[] | アクセスメソッド固有のオプション(「キーワード=値」形式の文字列)。 |
relpartbound | pg_node_tree | テーブルがパーティションである場合(relispartition を参照)、パーティション境界の内部表現。 |
遅延評価されるブールフラグ
pg_class 内のいくつかのブールフラグは遅延評価されます。すなわち、条件が成立している場合には確実に true に設定されますが、条件が成立しなくなった場合でも直ちに false にリセットされないことがあります。たとえば、relhasindex は CREATE INDEX によって設定されますが、DROP INDEX によってクリアされることはありません。代わりに、VACUUM がテーブルにインデックスが存在しないことを検出した際に relhasindex をクリアします。このような設計により、競合状態を回避し、同時実行性を向上させています。