
# PG_CLASS
PG_CLASS系统表存储数据库对象信息及其之间的关系。
表1PG_CLASS字段 
| 名称               | 类型               | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|
| oid              | oid              | 行标识符（隐藏属性，必须明确选择才会显示）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| relname          | name             | 表、索引、视图等对象的名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| relnamespace     | oid              | 包含该关系的命名空间的OID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| reltype          | oid              | 与该表的行类型对应的数据类型（索引为零，因为索引没有pg_type记录）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| reloftype        | oid              | 复合类型的OID，0表示其他类型。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| relowner         | oid              | 关系所有者。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| relam            | oid              | 如果行是索引，则就是所用的访问模式（B-tree，hash等）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| relfilenode      | oid              | 该关系在磁盘上的文件的名称，如果没有则为0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| reltablespace    | oid              | 该关系存储所在的表空间。如果为0，则使用该数据库的缺省表空间。如果关系无磁盘文件，该字段无意义。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| relpages         | double precision | 以页(大小为BLCKSZ)为单位的此表在磁盘上的大小，只是优化器使用的一个近似值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| reltuples        | double precision | 表中行的数目，只是优化器使用的一个估计值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| relallvisible    | integer          | 被标识为全可见的表中的页数。此字段是优化器用来做SQL执行优化使用的。VACUUM、ANALYZE和一些DDL语句（例如，CREATE INDEX）会引起此字段更新。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| reltoastrelid    | oid              | 与此表关联的TOAST表的OID ，如果没有则为0。 TOAST表在一个从属表里"离线"存储大字段。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| reltoastidxid    | oid              | 对于TOAST表是它的索引的OID，如果不是TOAST表则为0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| reldeltarelid    | oid              | Delta表的OID。 Delta表附属于列存表。用于存储数据导入过程中的甩尾数据。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| reldeltaidx      | oid              | Delta表的索引表OID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| relcudescrelid   | oid              | CU描述表的OID。 CU描述表（Desc表）附属于列存表。用于控制表目录中存储数据的可见性。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| relcudescidx     | oid              | CU描述表的索引表OID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| relhasindex      | boolean          | 如果对象是一个表且至少有（或者最近建有）一个索引，则为真。 由CREATE INDEX设置，但DROP INDEX不会立即将它清除。如果VACUUM进程检测一个表没有索引，会清理relhasindex字段，将relhasindex值设置为假。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| relisshared      | boolean          | 如果该表在整个集群中由所有数据库共享则为真。只有某些系统表（比如pg_database）是共享的。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| relpersistence   | "char"           | - p表示永久表。  - u表示非日志表。  - t表示本地临时表。  - g表示全局临时表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| relkind          | "char"           | - r表示普通表。  - i表示索引。  - S表示序列。  - v表示视图。  - c表示复合类型。  - t表示TOAST表。  - f表示外表。  - m表示物化视图。   |
| relnatts         | smallint         | 关系中用户字段数目（除了系统字段以外）。在pg_attribute里肯定有相同数目对应行。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| relchecks        | smallint         | 表上检查约束的数目，参见[PG_CONSTRAINT](https://support.huaweicloud.com/devg-dws/dws_04_0580.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| relhasoids       | boolean          | 如果为关系中每行都生成一个OID，则为真。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| relhaspkey       | boolean          | 如果该表有一个（或曾有）主键，则为真。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| relhasrules      | boolean          | 如果表有规则，则为真。是否有规则可参考系统表[PG_REWRITE](https://support.huaweicloud.com/devg-dws/dws_04_0614.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| relhastriggers   | boolean          | 如果表有（或曾有）触发器，则为真。参见[PG_TRIGGER](https://support.huaweicloud.com/devg-dws/dws_04_0623.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| relhassubclass   | boolean          | 如果表有（或曾有）任何继承的子表，则为真。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| relcmprs         | tinyint          | 表示是否启用表的压缩特性。需要特别注意，当且仅当批量插入才会触发压缩，普通的CRUD并不能够触发压缩。 - 0表示其他不支持压缩的表（主要是指系统表，不支持压缩属性的修改操作）。  - 1表示表数据的压缩特性为NOCOMPRESS或者无指定关键字。  - 2表示表数据的压缩特性为COMPRESS。                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| relhasclusterkey | boolean          | 是否有局部聚簇存储。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| relrowmovement   | boolean          | 针对分区表进行update操作时，是否允许行迁移。 - true：表示允许行迁移。  - false：表示不允许行迁移。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| parttype         | "char"           | 表或者索引是否具有分区表的性质。 - p表示带有分区表性质。  - n表示没有分区表特性。  - v表示该表为HDFS的Value分区表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| relfrozenxid     | xid32            | 该表中所有在此之间的事务ID已经被替换为一个固定的（"frozen"）事务ID。该字段用于跟踪表是否需要为了防止事务ID重叠（或者允许收缩pg_clog）而进行清理。如果该关系不是表则为0（InvalidTransactionId）。 为保持前向兼容，保留此字段，新增relfrozenxid64用于记录此信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| relacl           | aclitem\[\]      | 访问权限。 查询的回显结果为以下形式： ``` rolename=xxxx/yyyy  --赋予一个角色的权限 ``` ``` =xxxx/yyyy  --赋予public的权限 ``` xxxx表示赋予的权限，yyyy表示授予该权限的角色。权限的参数说明请参见[表2]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| reloptions       | text\[\]         | 特定的访问方法选项，用"keyword=value"字符串形式表示。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| relfrozenxid64   | xid              | 该表中所有在此之前的事务ID已经被替换为一个固定的（"frozen"）事务ID。该字段用于跟踪表是否需要为了防止事务ID重叠（或者允许收缩pg_clog）而进行清理。如果该关系不是表则为0（InvalidTransactionId）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   
数据库对象权限使用 ACL（Access Control List）进行控制。DWS使用aclitem来表示一个具体的数据库对象上的权限。
- 对于database和schema，aclitem存储在pg_database.datacl和pg_namespace.nspacl中。
- 对于table、view等其他数据库对象，aclitem存储在pg_class.relacl中。
- 对于列级别的权限，aclitem存储在pg_attribute.attacl中。
例如，test_user=a\*r/test_user1，表示test_user这个用户对当前数据库对象拥有INSERT和SELECT权限，其中INSERT权限带有with grant option，表示可以授权其他用户该权限。/test_user1表示这条aclitem权限是test_user1授予的。
下表列出了DWS中所有的数据库对象权限及其缩写。
 表2ACL权限的参数说明 
| 权限               | 缩写           | 适用的对象类型                                                                  |
|:---|:---|:---|
| SELECT（读）        | r            | LARGE OBJECT，SEQUENCE，TABLE (and table-like objects)，table column        |
| UPDATE（写）        | w            | LARGE OBJECT，SEQUENCE，TABLE，table column                                 |
| INSERT（插入）       | a            | TABLE，table column                                                       |
| DELETE           | d            | TABLE                                                                    |
| TRUNCATE         | D            | TABLE                                                                    |
| REFERENCES       | x            | TABLE，table column                                                       |
| TRIGGER          | t            | TABLE                                                                    |
| EXECUTE          | X            | FUNCTION，PROCEDURE                                                       |
| USAGE            | U            | DOMAIN，FOREIGN DATA WRAPPER，FOREIGN SERVER，LANGUAGE，SCHEMA，SEQUENCE，TYPE |
| CREATE           | C            | DATABASE，SCHEMA，TABLESPACE                                               |
| CONNECT          | c            | DATABASE                                                                 |
| TEMPORARY        | T            | DATABASE                                                                 |
| ANALYZE\|ANALYSE | A            | TABLE                                                                    |
| ALTER            | L            | TABLE                                                                    |
| DROP             | P            | TABLE                                                                    |
| VACUUM           | v            | TABLE                                                                    |
| ALL PRIVILEGES   | arwdDxtA，vLP | TABLE                                                                    |
| 给前面权限的授权选项       | \*           | -                                                                        |
   
#### 应用示例
查看某张表的oid及relfilenode。
```
SELECT oid,relname,relfilenode FROM pg_class WHERE relname = 'table_name';
```
统计行存表数量。
```
SELECT 'row count:'||count(1) as point FROM pg_class WHERE relkind = 'r' and oid > 16384 and reloptions::text not like '%column%' and reloptions::text not like '%internal_mask%';
```
统计列存表数量。
```
SELECT 'column count:'||count(1) as point FROM pg_class WHERE relkind = 'r' and oid > 16384 and reloptions::text like '%column%';
```
查询数据库中所有表的注释。
```
SELECT relname as tablename,obj_description(relfilenode,'pg_class') as comment FROM pg_class;
```
查看数据库中指定表的权限信息。
```
SELECT relacl FROM pg_class WHERE relname = 'table_name';
```
