PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

52.11. pg_class #

目录 pg_class 描述表以及拥有列或以其他方式 类似于表的其他对象。这包括索引(但另见 pg_index)、 序列(但另见 pg_sequence)、 视图、物化视图、复合类型和 TOAST 表; 见 relkind。在下文中, 当我们指所有这些类型的对象时,我们称之为“关系”。 pg_class 的所有列 并非对所有关系类型都有意义。

Table 52.11. \1 字段列说明

Column Type

Description

oid oid

Row identifier

relname name

表、索引、视图等的名称

relnamespace oid (references pg_namespace.oid)

包含此关系的命名空间的 OID

reltype oid (references pg_type.oid)

与该表行类型对应的数据类型的 OID(如果有); 索引、序列和 TOAST 表没有 pg_type 条目, 因而为零

reloftype oid (references pg_type.oid)

对于有类型的表,是底层复合类型的 OID; 对于所有其他关系则为零

relowner oid (references pg_authid.oid)

关系的拥有者

relam oid (references pg_am.oid)

用于访问该表或索引的访问方法。 如果该关系是一个序列或没有磁盘上的文件,则此字段没有意义; 但分区表除外:如果设置了该字段,当创建命令中未指定访问方法时, 它会优先于 default_table_access_method 来确定其分区所使用的访问方法。

relfilenode oid

该关系磁盘上文件的名字;零表示这是一个“映射”关系, 其磁盘文件名由底层状态决定

reltablespace oid (references pg_tablespace.oid)

存储该关系的表空间。如果为零,则意味着使用该数据库的默认表空间。 如果该关系没有磁盘上的文件,则此字段没有意义; 但分区表除外:它表示当创建命令中未指定表空间时, 其分区将被创建在其中的那个表空间。

relpages int4

该表磁盘上表示形式的大小,以页为单位(页大小为 BLCKSZ)。这只是规划器使用的一个估计值。 它由 VACUUM、 ANALYZE 以及一些 DDL 命令(例如 CREATE INDEX)更新。

reltuples float4

表中存活行的数目。这只是规划器使用的一个估计值。 它由 VACUUM、 ANALYZE 以及一些 DDL 命令(例如 CREATE INDEX)更新。 如果该表还从未被清理或分析过,则 reltuples 包含 -1,表示行数未知。

relallvisible int4

在表的可见性映射中被标记为全可见(all-visible)的页数。 这只是规划器使用的一个估计值。 它由 VACUUM、 ANALYZE 以及一些 DDL 命令(例如 CREATE INDEX)更新。

relallfrozen int4

在表的可见性映射中被标记为全冻结(all-frozen)的页数。 这只是用于触发自动清理的一个估计值。它也可以与 relallvisible 一起用于安排手工清理 以及调优 清理的冻结行为。 它由 VACUUM、 ANALYZE 以及一些 DDL 命令(例如 CREATE INDEX)更新。

reltoastrelid oid (references pg_class.oid)

与该表关联的 TOAST 表的 OID,如果没有则为零。 TOAST 表把大属性“移出主线”存放在一个二级表中。

relhasindex bool

如果这是一个表并且它具有(或最近有过)索引则为真

relisshared bool

如果为真,则该表在集群中的所有数据库之间共享。 只有某些系统目录(例如 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

如果表具有(或曾经有过)规则则为真;见 pg_rewrite 目录

relhastriggers bool

如果表具有(或曾经有过)触发器则为真;见 pg_trigger 目录

relhassubclass bool

如果表或索引具有(或曾经有过)任何继承子对象或分区则为真

relrowsecurity bool

如果表启用了行级安全则为真;见 pg_policy 目录

relforcerowsecurity bool

如果为真,则行级安全(在启用时)也将应用于表所有者;见 pg_policy 目录

relispopulated bool

如果为真,则该关系已被填充(除某些物化视图外, 所有关系都是如此)

relreplident char

用于构成行“副本标识”的列: d = 默认(主键,如果有), n = 无, f = 所有列, i = 设置了 indisreplident 的索引 (如果所用的索引已被删除,则等同于无)

relispartition bool

如果表或索引是一个分区则为真

relrewrite oid (references pg_class.oid)

对于在需要重写表的 DDL 操作期间正在写入的新关系, 此字段包含原关系的 OID;否则为零。 该状态只在内部可见;对于用户可见的关系, 此字段除零之外不应包含任何其他内容。

relfrozenxid xid

在该表中,此值之前的所有事务 ID 都已被一个永久 (“冻结”)事务 ID 替换。它用于跟踪 该表是否需要被清理以防止事务 ID 回卷, 或允许收缩 pg_xact。 如果该关系不是表,则为零 (InvalidTransactionId)。

relminmxid xid

在该表中,此值之前的所有多事务 ID 都已被一个事务 ID 替换。 它用于跟踪该表是否需要被清理以防止多事务 ID 回卷, 或允许收缩 pg_multixact。 如果该关系不是表,则为零 (InvalidMultiXactId)。

relacl aclitem[]

访问特权;详见 Section 5.8

reloptions text[]

访问方法特定的选项,以 “keyword=value” 字符串的形式

relpartbound pg_node_tree

如果表是一个分区(见 relispartition),则为分区边界的内部表示


pg_class 中的一些布尔标志是惰性维护的: 如果那是正确的状态,它们保证为真, 但当条件不再为真时,它们可能不会立即被重置为假。 例如,relhasindex 由 CREATE INDEX 设置, 但从不被 DROP INDEX 清除。 相反,如果 VACUUM 发现表没有索引,它就会清除 relhasindex。 这种安排避免了竞争条件并改善了并发性。