Skip to content

53.11.pg_class#

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

表 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 树、哈希等);否则为零(对于序列以及没有存储空间的关系(例如视图),该值为零)

relfilenode oid

此关系的磁盘文件名称;零表示这是一个 映射 关系,其磁盘文件名由底层状态确定

reltablespace oid(引用 pg_tablespace.oid

存储此关系的表空间。如果为零,则表示数据库的默认表空间。(如果关系没有磁盘文件,则没有意义。)

relpages int4

此表在磁盘上的表示大小,以页为单位(大小为 BLCKSZ)。这只是规划器使用的估计值。它由 VACUUMANALYZE 和一些 DDL 命令(例如 CREATE INDEX)更新。

reltuples float4

表中的活动行数。这只是规划器使用的估计值。它由 VACUUMANALYZE 和一些 DDL 命令(例如 CREATE INDEX)更新。如果表从未进行过 vacuum 或 analyze,reltuples 将包含 -1,表示行数未知。

relallvisible int4

表可见性映射中标记为全部可见的页数。这只是规划器使用的估计值。它由 VACUUMANALYZE 和一些 DDL 命令(例如 CREATE INDEX)更新。

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

用于形成行的 副本标识 的列: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 环绕或允许 pg_multixact 缩小。如果关系不是表,则为零(InvalidMultiXactId)。

relacl aclitem[]

访问权限;有关详细信息,请参见 第 5.7 节

reloptions text[]

访问方法特定的选项,如 关键字=值 字符串

relpartbound pg_node_tree

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

pg_class中的几个布尔标志是延迟维护的:如果那是正确状态,则保证它们为 true,但当条件不再为 true 时,可能不会立即重置为 false。例如,relhasindexCREATE INDEX设置,但它永远不会被DROP INDEX清除。相反,VACUUM在发现表没有索引时清除relhasindex。这种安排避免了竞争条件并提高了并发性。