PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 48. 系统表 | 下一页

# 48.11. `pg_class`

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

表 48-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 表在一个从属表里"离线"存储大字段。
`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`表
`relhasoids` | `bool` |  | 如果为关系中每行都生成一个 OID 则为真
`relhaspkey` | `bool` |  | 如果这个表有一个(或者曾经有一个)主键，则为真。
`relhasrules` | `bool` |  | 如表有（或曾经有）规则就为真；参阅`pg_rewrite`表
`relhastriggers` | `bool` |  | 如果表有(或者曾经有)触发器，则为真；参阅`pg_trigger`表
`relhassubclass` | `bool` |  | 如果有(或者曾经有)任何继承的子表，为真。
`relispopulated` | `bool` |  | 如果关系是填充的则为真（对所有关系为真，除了一些物化视图）
`relreplident` | `char` |  | 用来形成行的"副本身份"的字段： `d` = 缺省 (主键，如果有)， `n` = 空， `f` = 所有字段 `i` = 带有`indisreplident`集的索引，或缺省
`relfrozenxid` | `xid` |  | 该表中所有在这个之前的事务 ID 已经被一个固定的("frozen")事务 ID 替换。 这用于跟踪该表是否需要为了防止事务 ID 重叠或者允许收缩`pg_clog` 而进行清理。如果该关系不是表则为零(`InvalidTransactionId`)。
`relminmxid` | `xid` |  | 该表中所有在这个之前的 multixact ID 已经被一个事务 ID 替换。 这用于跟踪该表是否需要为了防止 multixact ID 重叠或者允许收缩`pg_multixact` 而进行清理。如果该关系不是表则为零(`InvalidMultiXactId`)。
`relacl` | `aclitem[]` |  | 访问权限。参阅GRANT和REVOKE获取详细信息。
`reloptions` | `text[]` |  | 访问方法特定的选项，使用"keyword=value"格式的字符串

`pg_class`中的几个布尔标识是懒于维护的：如果这是正确的状态则他们被保证为真， 但是当状态不再是真时不会被立马重新设置为假。例如，`relhasindex` 是由`CREATE INDEX`设置的，但是从不用`DROP INDEX`删除。 相反，如果发现表没有索引了，由`VACUUM`清除`relhasindex`。 这个安排避免了竞态条件，提高了并发性。

上一页 | 起始页 | 下一页
`pg_cast` | 上一级 | `pg_collation`