52.11. pg_class

目录pg_class对表以及具有列或与表相似的其他所有内容进行目录。其中包括索引(另请参见pg_index),序列(另请参见pg_sequence),视图,实例化视图,组合类型和 TOAST 表;参见relkind。下面,当我们指所有这些对象时,我们称之为“关系”。并非所有列对于所有关系类型都有意义。

表 52.11. pg_class

NameTypeReferencesDescription
oidoid 行标识符(隐藏属性;必须显式选择)
relnamename 表的名称,索引,视图等
relnamespaceoidpg_namespace.oid包含此关系的名称空间的 OID
reltypeoidpg_type.oid与此表的行类型相对应的数据类型的 OID(如果有的话)(对于没有pg_type条目的索引为零)
reloftypeoidpg_type.oid对于类型表,基础组合类型的 OID,对于所有其他关系为零
relowneroidpg_authid.oid关系的所有者
relamoidpg_am.oid如果这是一个索引,则使用的访问方法(B 树,哈希等)
relfilenodeoid 此关系的磁盘文件名;零表示这是一个“Map”关系,其磁盘文件名由低级状态确定
reltablespaceoidpg_tablespace.oid存储此关系的表空间。如果为零,则隐含数据库的默认表空间。 (如果该关系没有磁盘文件,则没有意义.)
relpagesint4 该表的磁盘表示形式的大小,以页为单位(大小为BLCKSZ)。这只是计划者使用的估计值。它由VACUUMANALYZE和一些 DDL 命令(如CREATE INDEX)更新。
reltuplesfloat4 表中的活动行数。这只是计划者使用的估计值。它由VACUUMANALYZE和一些 DDL 命令(例如CREATE INDEX)更新。
relallvisibleint4 在表格的可见性图中标记为全可见的页面数。这只是计划者使用的估计值。它由VACUUMANALYZE和一些 DDL 命令(例如CREATE INDEX)更新。
reltoastrelidoidpg_class.oid与此表关联的 TOAST 表的 OID,如果没有,则为 0. TOAST 表将大型属性“离线”存储在辅助表中。
relhasindexbool 如果这是一个表并且具有(或最近具有)任何索引,则为 True
relissharedbool 如果此表在集群中的所有数据库之间共享,则为 True。仅共享某些系统目录(例如pg_database)。
relpersistencechar p =永久表,u =未记录表,t =临时表
relkindchar r =普通表,i =索引,S =序列,t = TOAST 表,v =视图,m =实例化视图,c =复合类型,f =外部表,p =分区表,I =分区索引
relnattsint2 关系中的用户列数(不计算系统列)。 pg_attribute中必须有这么多对应的条目。另请参见pg_attribute.attnum
relchecksint2 表格上CHECK个约束的数量;参见pg_constraint目录
relhasoidsbool 如果我们为关系的每一行生成一个 OID,则为 true
relhasrulesbool 如果表具有(或曾经具有)规则,则为 true;否则为 true。参见pg_rewrite目录
relhastriggersbool 如果表具有(或曾经具有)触发器,则为 true;否则为 true。参见pg_trigger目录
relhassubclassbool 如果表有(或曾经有)任何继承子代,则为真
relrowsecuritybool 如果表启用了行级安全性,则为 true;否则为 false。参见pg_policy目录
relforcerowsecuritybool 如果行级安全性(启用时)也适用于表所有者,则为 true;否则为 true。参见pg_policy目录
relispopulatedbool 如果关系已填充,则为 true(对于除某些实例化视图以外的所有关系,都为 true)
relreplidentchar 用于为行形成“副本身份”的列:d =默认值(主键,如果有的话),n =无,f =所有列i =设置了indisreplident的索引
relispartitionbool 如果表或索引是分区,则为真
relrewriteoidpg_class.oid对于在需要表重写的 DDL 操作期间写入的新关系,此关系包含原始关系的 OID。否则为 0.该状态仅在内部可见;否则为 0.对于用户可见的关系,该字段不得包含 0 以外的任何内容。
relfrozenxidxid 此表之前的所有事务 ID 已被永久(“冻结”)事务 ID 取代。这用于跟踪表是否需要清理以防止事务 ID 环绕或允许pg_xact收缩。如果该关系不是表,则为零(InvalidTransactionId)。
relminmxidxid 此表之前的所有多重 ID 已被事务 ID 取代。这用于跟踪是否需要清理表以防止多重 ID 环绕或使pg_multixact收缩。如果该关系不是表,则为零(InvalidMultiXactId)。
relaclaclitem[] 访问权限;有关详情,请参见GRANTREVOKE
reloptionstext[] 访问方法特定的选项,如“ keyword = value”字符串
relpartboundpg_node_tree 如果 table 是一个分区(请参见relispartition),则绑定该分区的内部表示

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