45.11. pg_class

pg_class表记载表和几乎所有有字段或者是那些类似表的东西。 包括索引(不过还要参阅pg_index)、序列、视图、复合类型和一些特殊关系类型; 参阅relkind。在下面,当指所有这些对象的时候说"关系"。 不是所有字段对所有关系类型都有意义。

Table 45-11. pg_class Columns

名称类型引用描述
relnamename 表、索引、视图等的名字。
relnamespaceoidpg_namespace.oid 包含这个关系的名字空间(模式)的OID
reltypeoidpg_type.oid 对应这个表的行类型的数据类型(索引为零,它们没有pg_type记录)。
reloftypeoidpg_type.oid 对于类型表,复合类型的OID,所有其他关系为零。
relowneroidpg_authid.oid关系所有者
relamoidpg_am.oid如果行是索引,那么就是所用的访问模式(B-tree, hash 等等)
relfilenodeoid  这个关系在磁盘上的文件名,零表示这一点 是一个"映射"关系由低层次的状态确定的磁盘文件的名称。
reltablespaceoidpg_tablespace.oid 这个关系存储所在的表空间。如果为零,则意味着使用该数据库的缺省表空间。 如果关系在磁盘上没有文件,则这个字段没有什么意义。
relpagesint4  以页(大小为BLCKSZ)的此表在磁盘上的形式的大小。它只是规划器用的一个估计值, 是由VACUUM, ANALYZE和几个DDL命令,比如CREATE INDEX更新。
reltuplesfloat4  表中行数。只是规划器使用的一个估计值,由VACUUM, ANALYZE和几个DDL命令,比如CREATE INDEX更新。
reltoastrelidoidpg_class.oid 与此表关联的TOAST表的OID,如果没有为0。TOAST表在一个从属表里"离线"存储大字段。
reltoastidxidoidpg_class.oid 对于TOAST表是它的索引的OID,如果不是TOAST表则为0
relhasindexbool  如果它是一个表而且至少有(或者最近有过)一个索引,则为真。
relissharedbool  如果该表在整个集群中由所有数据库共享则为真。只有某些系统表(比如pg_database)是共享的。
relistempbool  结果是真,如果表是一个临时关系。如果这样,仅创建会话的能安全进入它的内容。
relkindchar  r = 普通表, i = 索引, S = 序列, v = 视图, c = 复合类型, t = TOAST表
relnattsint2  关系中用户字段数目(除了系统字段以外)。在pg_attribute里肯定有相同数目对应行。 又见pg_attribute.attnum
relchecksint2  表里的检查约束的数目;参阅pg_constraint
relhasoidsbool  如果为关系中每行都生成一个OID则为真
relhaspkeybool  如果这个表有一个(或者曾经有一个)主键,则为真。
relhasexclusionbool  一个表,如果表中有(或曾经)任何排斥约束则为真;一个索引,如果索引支持排斥约束则为真。
relhasrulesbool  如表有规则就为真;参阅pg_rewrite
relhastriggersbool  表里有(或者曾经有一个)触发器则为TRUE;参阅pg_trigger
relhassubclassbool 如果有(或者曾经有)任何继承的子表,则为真。
relfrozenxidxid  该表中所有在这个之前的事务ID已经被一个固定的("冻结")事务ID替换。 这用于跟踪该表是否需要为了防止事务ID重叠或者允许收缩pg_clog而进行清理。 如果该关系不是表,则为零(InvalidTransactionId)。
relaclaclitem[]  访问权限。参阅GRANTREVOKE获取详细信息。
reloptionstext[]  访问方法特定的选项,使用"keyword=value"格式的字符串

几个pg_class布尔标志保持 懒散:他们都保证是真的,如果这是正确的状态,当条件不再为真,但 可能不能立即重置为假。比如,relhasindex通过CREATE INDEX设置,但是 从来没有通过DROP INDEX清除它。而是,如果发现表中没有索引,VACUUM清除relhasindex 。这种安排避免了竞争条件并且提高并发性。