PG_CLASS
PG_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" |
| ||||
relkind | "char" |
| ||||
relnatts | smallint | 关系中用户字段数目(除了系统字段以外)。在pg_attribute里肯定有相同数目对应行。 | ||||
relchecks | smallint | 表上检查约束的数目,参见PG_CONSTRAINT。 | ||||
relhasoids | boolean | 如果为关系中每行都生成一个OID,则为真。 | ||||
relhaspkey | boolean | 如果该表有一个(或曾有)主键,则为真。 | ||||
relhasrules | boolean | 如果表有规则,则为真。是否有规则可参考系统表PG_REWRITE。 | ||||
relhastriggers | boolean | 如果表有(或曾有)触发器,则为真。参见PG_TRIGGER。 | ||||
relhassubclass | boolean | 如果表有(或曾有)任何继承的子表,则为真。 | ||||
relcmprs | tinyint | 表示是否启用表的压缩特性。需要特别注意,当且仅当批量插入才会触发压缩,普通的CRUD并不能够触发压缩。
| ||||
relhasclusterkey | boolean | 是否有局部聚簇存储。 | ||||
relrowmovement | boolean | 针对分区表进行update操作时,是否允许行迁移。
| ||||
parttype | "char" | 表或者索引是否具有分区表的性质。
| ||||
relfrozenxid | xid32 | 该表中所有在此之间的事务ID已经被替换为一个固定的("frozen")事务ID。该字段用于跟踪表是否需要为了防止事务ID重叠(或者允许收缩pg_clog)而进行清理。如果该关系不是表则为0(InvalidTransactionId)。 为保持前向兼容,保留此字段,新增relfrozenxid64用于记录此信息。 | ||||
relacl | aclitem[] | 访问权限。 查询的回显结果为以下形式:
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中所有的数据库对象权限及其缩写。
权限 | 缩写 | 适用的对象类型 |
|---|---|---|
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。
1 | SELECT oid,relname,relfilenode FROM pg_class WHERE relname = 'table_name'; |
统计行存表数量。
1 | 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%'; |
统计列存表数量。
1 | SELECT 'column count:'||count(1) as point FROM pg_class WHERE relkind = 'r' and oid > 16384 and reloptions::text like '%column%'; |
查询数据库中所有表的注释。
1 | SELECT relname as tablename,obj_description(relfilenode,'pg_class') as comment FROM pg_class; |
查看数据库中指定表的权限信息。
1 | SELECT relacl FROM pg_class WHERE relname = 'table_name'; |

