更新时间:2024-06-19 GMT+08:00

PG_CLASS

PG_CLASS系统表存储数据库对象信息及其之间的关系。

表1 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"

  • p表示永久表。
  • u表示非日志表。
  • t表示临时表。

relkind

"char"

  • r表示普通表。
  • i表示索引。
  • S表示序列。
  • v表示视图。
  • c表示复合类型。
  • t表示TOAST表。
  • f表示外表。

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并不能够触发压缩。

  • 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[]

访问权限。

查询的回显结果为以下形式:

1
rolename=xxxx/yyyy  --赋予一个角色的权限
1
=xxxx/yyyy  --赋予public的权限

xxxx表示赋予的权限,yyyy表示授予该权限的角色。权限的参数说明请参见表2

reloptions

text[]

特定的访问方法选项,用"keyword=value"字符串形式表示。

relfrozenxid64

xid

该表中所有在此之前的事务ID已经被替换为一个固定的("frozen")事务ID。该字段用于跟踪表是否需要为了防止事务ID重叠(或者允许收缩pg_clog)而进行清理。如果该关系不是表则为0(InvalidTransactionId)。

表2 权限的参数说明

参数

参数说明

r

SELECT(读)

w

UPDATE(写)

a

INSERT(插入)

d

DELETE

D

TRUNCATE

x

REFERENCES

t

TRIGGER

X

EXECUTE

U

USAGE

C

CREATE

c

CONNECT

T

TEMPORARY

A

ANALYZE|ANALYSE

L

ALTER

P

DROP

v

VACUUM

arwdDxtA, vLP

ALL PRIVILEGES(用于表)

*

给前面权限的授权选项

应用示例

查看某张表的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 tabname,obj_description(relfilenode,'pg_class') as comment FROM pg_class;