多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 47.11\. `pg_class` `pg_class`表记载表和几乎所有有字段或者是那些类似表的东西。 包括索引(不过还要参阅`pg_index`)、序列、视图、物化视图、 复合类型和一些特殊关系类型;参阅`relkind`。在下面, 当指所有这些对象的时候说"关系"(relations)。不是所有字段对所有关系类型都有意义。 **Table 47-11\. `pg_class` 字段** | 名字 | 类型 | 引用 | 描述 | | --- | --- | --- | --- | | `oid` | `oid` | 行标识符(隐藏属性; 必须明确选择) | | `relname` | `name` | 表、索引、视图等的名字。 | | `relnamespace` | `oid` | `pg_namespace`.oid | 包含这个关系的名字空间(模式)的 OID | | `reltype` | `oid` | `pg_type`.oid | 如果有,则为对应这个表的行类型的数据类型的OID(索引为零,它们没有`pg_type`记录)。 | | `reloftype` | `oid` | `pg_type`.oid | 对于类型表,为底层复合类型的OID,对于所有其他关系为0 | | `relowner` | `oid` | `pg_authid`.oid | 关系所有者 | | `relam` | `oid` | `pg_am`.oid | 如果行是索引,那么就是所用的访问模式(B-tree, hash 等等) | | `relfilenode` | `oid` | 这个关系在磁盘上的文件的名字,0表示这是一个"映射的"关系, 它的文件名取决于行级别的状态 | | `reltablespace` | `oid` | `pg_tablespace`.oid | 这个关系存储所在的表空间。如果为零,则意味着使用该数据库的缺省表空间。 如果关系在磁盘上没有文件,则这个字段没有什么意义。 | | `relpages` | `int4` | 以页(大小为`BLCKSZ`)的此表在磁盘上的形式的大小。 它只是规划器用的一个近似值,是由`VACUUM`,`ANALYZE` 和几个 DDL 命令,比如`CREATE INDEX`更新。 | | `reltuples` | `float4` | 表中行的数目。只是规划器使用的一个估计值,由`VACUUM`,`ANALYZE` 和几个 DDL 命令,比如`CREATE INDEX`更新。 | | `relallvisible` | `int4` | 在表的可见映射中标记所有可见的页的数目。只是规划器使用的一个估计值, 由`VACUUM`,`ANALYZE` 和几个 DDL 命令,比如`CREATE INDEX`更新。 | | `reltoastrelid` | `oid` | `pg_class`.oid | 与此表关联的 TOAST 表的 OID ,如果没有为 0 。TOAST 表在一个从属表里"离线"存储大字段。 | | `reltoastidxid` | `oid` | `pg_class`.oid | 对于 TOAST 表是它的索引的 OID ,如果不是 TOAST 表则为 0 | | `relhasindex` | `bool` | 如果它是一个表而且至少有(或者最近有过)一个索引,则为真。 | | `relisshared` | `bool` | 如果该表在整个集群中由所有数据库共享则为真。只有某些系统表 (比如`pg_database`)是共享的。 | | `relpersistence` | `char` | `p` = permanent table(永久表), `u` = unlogged table(未加载的表), `t` = temporary table (临时表) | | `relkind` | `char` | `r` = ordinary table(普通表), `i` = index(索引), `S` = sequence(序列), `v` = view(视图), `m` = materialized view(物化视图), `c` = composite type(复合类型), `t` = TOAST table(TOAST 表), `f` = foreign table(外部表) | | `relnatts` | `int2` | 关系中用户字段数目(除了系统字段以外)。在`pg_attribute` 里肯定有相同数目对应行。又见`pg_attribute.attnum`。 | | `relchecks` | `int2` | 表里的`CHECK`约束的数目;参阅[`pg_constraint`](#calibre_link-579)表 | | `relhasoids` | `bool` | 如果为关系中每行都生成一个 OID 则为真 | | `relhaspkey` | `bool` | 如果这个表有一个(或者曾经有一个)主键,则为真。 | | `relhasrules` | `bool` | 如表有(或曾经有)规则就为真;参阅[`pg_rewrite`](#calibre_link-756)表 | | `relhastriggers` | `bool` | 如果表有(或者曾经有)触发器,则为真;参阅[`pg_trigger`](#calibre_link-522)表 | | `relhassubclass` | `bool` | 如果有(或者曾经有)任何继承的子表,为真。 | | `relispopulated` | `bool` | 如果关系是填充的则为真(对所有关系为真,除了一些物化视图) | | `relfrozenxid` | `xid` | 该表中所有在这个之前的事务 ID 已经被一个固定的("frozen")事务 ID 替换。 这用于跟踪该表是否需要为了防止事务 ID 重叠或者允许收缩`pg_clog` 而进行清理。如果该关系不是表则为零(`InvalidTransactionId`)。 | | `relminmxid` | `xid` | 该表中所有在这个之前的多事务 ID 已经被一个事务 ID 替换。 这用于跟踪该表是否需要为了防止多事务 ID 重叠或者允许收缩`pg_clog` 而进行清理。如果该关系不是表则为零(`InvalidTransactionId`)。 | | `relacl` | `aclitem[]` | 访问权限。参阅[GRANT](#calibre_link-19)和[REVOKE](#calibre_link-20)获取详细信息。 | | `reloptions` | `text[]` | 访问方法特定的选项,使用"keyword=value"格式的字符串 | `pg_class`中的几个布尔标识是懒于维护的:如果这是正确的状态则他们被保证为真, 但是当状态不再是真时不会被立马重新设置为假。例如,`relhasindex` 是由`CREATE INDEX`设置的,但是从不用`DROP INDEX`删除。 相反,如果发现表没有索引了,由`VACUUM`清除`relhasindex`。 这个安排避免了竞态条件,提高了并发性。