系统表

本节记录对PostgreSQL系统表进行修订部分内容,以及新增数据库兼容特性相关系统表内容。

其中PG_OBJECT、PG_PACKAGE、PG_PACKAGE_BODY、DUAL、PG_RECYCLEBIN为新增系统表。

表名称 说明
PG_ATTRIBUTE 存储有关表列的信息
PG_CLASS 存储表、索引、序列、视图等对象的信息
PG_FOREIGN_SERVER 存储外部服务相关信息
PG_OBJECT 存储对象相关信息
PG_PACKAGE 定义了PLISQL的包
PG_PACKAGE_BODY 定义了PLISQL的包体
PG_SEQUENCE 存储有关序列的信息
DUAL 伪表
PG_RECYCLEBIN 存储可回收对象的信息

PG_ATTRIBUTE

表pg_attribute存储有关表列的信息。数据库中的每一个表的每一个列都恰好在pg_attribute中有一行。(这其中也会有索引的属性项,并且事实上所有具有pg_class项的对象在这里都有属性项),术语属性等同于列,这里使用是尊重PG官方手册。

列名 数据类型 引用 描述
ATTRELID OID pg_class.oid 列所属的表
ATTNAME NAME 列名
ATTTYPID OID pg_type.oid 列的数据类型
ATTSTATTARGET INT4 attstattarget控制由ANALYZE对此列收集的统计信息的细节层次。0值表示不会收集任何统计信息。一个负值则说明直接使用系统默认的目标。正值的确切含义取决于数据类型。对于标量数据类型,attstattarget既是要收集的“最常见值”的目标号,也是要创建的柱状图容器的目标号。
ATTLEN INT2 本列类型的pg_type.typelen的一个拷贝
ATTNUM INT2 列的编号。一般列从1开始向上编号。系统列(如ctid)则拥有(任意)负值编号
ATTNDIMS INT4 如果该列是一个数组类型,这里就是其维度数;否则为0。(在目前一个数组的维度数并不被强制,因此任何非零值都能有效地表明“这是一个数组”。)
ATTCACHEOFF INT4 在存储中总是为-1,但是当被载入到一个内存中的行描述符后,这里可能会更新为属性在行内的偏移
ATTTYPMOD INT4 atttypmod记录了在表创建时提供的类型相关数据(例如一个varchar列的最大长度)。它会被传递给类型相关的输入函数和长度强制函数。对于那些不需要atttypmod的类型,这个值通常总是为-1.
ATTBYVAL BOOL 该列类型的pg_type.typbyval的一个拷贝
ATTSTORAGE CHAR 通常是该列类型的pg_type.typstorage的一个拷贝。对于可TOAST的数据类型,这可以在创建后被修改以控制存储策略。
ATTALIGN CHAR 该列类型的pg_type.typalign的一个拷贝
ATTCOMPRESSION CHAR 该列当前的压缩方法。通常为’\0’以指定使用当前默认设置。否则,’p’选择pglz压缩,而’l’选择LZ4压缩。但是,当attstorage不允许压缩时,该字段将被忽略。
ATTNOTNULL BOOL 这表示一个非空约束
ATTHASDEF BOOL 该列有一个默认表达式或生成的表达式,在此情况下在pg_attrdef表中会有一个对应项来真正定义该表达式。(检查attgenerated以确定是默认还是生成的表达式。)
ATTHASMISSING BOOL 该列在行中完全缺失时会用到这个列的值,如果在行创建之后增加一个有非易失DEFAULT值的列,就会发生这种情况。实际使用的值被存放在attmissngval列中。
ATTIDENTITY CHAR 在PG兼容模式中,如果是一个零字节(’’),则不是一个标识列。否则,a=总是生成,d=默认生成。

在Oracle兼容模式中,i代表自增列不能插入只能生成,o代表可以指定插入,但不能指定插入NULL,n代表可以指定插入,包括NULL
ATTGENERATED CHAR 如果为零字节(’’),则不是生成的列。否则,s=stored。(将来可能会添加其他值。)
ATTISDROPPED BOOL 该列被删除且不再有效。一个删除的列仍然物理存在于表中,但是会被分析器忽略并因此无法通过SQL访问。
ATTISLOCAL BOOL 该列是由关系本地定义的。注意一个列可以同时时本地定义和继承的。
ATTINHCOUNT INT4 该列的直接祖先的编号。一个具有非零编号祖先的列不可能被删除或者重命名。
ATTCOLLATION OID pg_collation.oid 该列被定义的排序规则,如果该列不是一个可排序数据类型则为0。
ATTACL ACLITEM[] 列级访问权限
ATTOPTIONS TEXT[] 属性级选项,以“keyword=value”形式的字符串
ATTFDWOPTIONS TEXT[] 属性级的外部数据包装器选项,以“keyword=value”形式的字符串
ATTMISSINGVAL ANYARRAY 这个列中是一个含有一个元素的数组,其中的值被用于该列在行中完全缺失时,如果在行创建之后增加一个有非易失DEFAULT值的列,就会发生这种情况。只有当atthasmissing为真时才使用这个值。如果没有值则该列为空。
ATTISVISIBLE BOOL 列是否可见,默认可见

PG_CLASS

表pg_class记录表和几乎所有具有列或者像表的对象。这包括索引、序列、视图、物化视图、组合类型和TOAST表

列名 数据类型 引用 描述
OID OID 行标识符
RELNAME NAME 表、索引、视图等的名字
RELNAMESPACE OID pg_namespace.oid 包含该关系的名字空间的OID
RELTYPE OID pg_type.oid 可能存在的表行类型所对应数据类型的OID;对索引为0,序列,和toast表,索引没有pg_type项
RELOFTYPE OID pg_type.od 对于有类型的表,为底层组合类型的OID,对于其他所有关系为0
RELOWNER OID pg_authid.oid 关系的拥有者
RELAM OID pg_am.oid 如果这是一个表或者索引,表示索引使用的访问方法(堆、B树、哈希等);否则为0(0出现在序列,以及没有存储的关系,例如视图)
RELFILENODE OID 该关系的磁盘文件的名字,0表示这是一个“映射”关系,其磁盘文件名取决于低层状态
RELTABLESPACE OID pg_tablespace.oid 该关系所存储的表空间。如果为0,使用数据库的默认表空间。(如果关系无磁盘文件时无意义)
RELPAGES INT4 该表磁盘表面的尺寸,以页面计(页面尺寸为BLCKSZ)。这只是一个由规划器使用的估计值。
RELTUPLES FLOAT4 表中的存活行数。这只是一个由规划器使用的估计值。如果该表从未被清理或分析,包含-1的reltuples表示行数是未知的。
RELALLVISIBLE INT4 在表的可见性映射表中被标记为全可见的页数。这只是一个由规划器使用的估计值。
RELTOASTRELID OID pg_class.oid 与该表相关联的TOAST表的OID,如果没有则为零。TOAST表将大属性“线外”存储在一个二级表中。
RELHASINDEX BOOL 如果这是一个表并且其上建有(或最近建有)索引则为真
RELISSHARED BOOL 如果该表在集簇中的所有数据库间共享则为真。只有某些系统目录(如pg_database)是共享的。
RELPERSISTENCE CHAR p = 永久表,u = 无日志表, t = 临时表,g=全局临时表
RELKIND CHAR r = 普通表, i = 索引, S = 序列, t = TOAST表, v = 视图, m = 物化视图, c = 组合类型, f = 外部表, p = 分区表, I = 分区索引
RELNATTS INT2 关系中用户列的数目(系统列不计算在内)。在pg_attribute中必须有这么多对应的项。
RELCHECKS INT2 表上CHECK约束的数目
RELHASRULES BOOL 如果表有(或曾有)规则则为真
RELHASTRIGGERS BOOL 如果表有(或曾有)触发器则为真
RELHASSUBCLASS BOOL 如果表或索引具有(或曾经具有)任何继承子项,则为真(True)
RELROWSECURITY BOOL 如果表上启用了行级安全性则为真
RELFORCEROWSECURITY BOOL 如果行级安全性(启用时)也适用于表拥有者则为真
RELISPOPULATED BOOL 如果表已被填充则为真(对于所有关系该列都为真,但对于某些物化视图却不是)
RELREPLIDENT CHAR 用来为行形成“replica identity”的列: d = 默认 (主键,如果存在), n = 无, f = 所有列 i = 索引的indisreplident被设置或者为默认
RELISPARTITION BOOL 如果表或索引是一个分区,则为真
RELREWRITE OID pg_class.oid 对于在要求表重写的DDL操作期间被写入的新关系,这个域包含原始关系的OID,否则为零。 那种状态仅在内部可见,对于一个用户可见的关系这个域应该从不包含不是零的值
RELFROZENXID XID 在此之前的所有事务ID在表中已经被替换为一个永久的(“冻结的”) 事务ID。 这用于跟踪表是否需要被清理,以便阻止事务ID回卷或者允许pg_xact被收缩。 如果该关系不是一个表则为0(InvalidTransactionId)
RELMINMXID XID 在此之前的多事务ID在表中已经被替换为一个事务ID。这被用于跟踪表是否需要被清理,以阻止 多事务ID回卷或者允许pg_multixact被收缩。如果关系不是一个表则 为0(InvalidMultiXactId)
RELACL ACLITEM[] 访问权限
RELOPTIONS TEXT[] 访问方法相关的选项,以“keyword=value”字符串形式
RELPARTBOUND PG_NODE_TREE 如果表示一个分区(见relispartition),分区边界的内部表达
RELHASROWID BOOL 表是否拥有ROWID,默认否

PG_FOREIGN_SERVER

列名 类型 说明
OID oid 行标识符
srvname name 外部服务器的名字
srvowner oid 外部服务器的拥有者
srvfdw oid 此外部服务器的外部数据包装器的OID
olnkispublic boolean 标识创建的dblink是否是public的
olnkisshared boolean 标识创建的dblink是否是共享的
olnksharedauth boolean 标识创建的共享的dblink是否通过认证,验证只在第一次调用时,如果通过验证,将更新这个值,后续在同一个dblink上的访问将不再发起认证
olnkconntype bigint 标识创建的dblink的类型,有三种枚举类型ORA_DBLINK_CONNECTED_USER、ORA_DBLINK_FIXED_USER、ORA_DBLINK_CURRENT_USER对用,其值为1、2、3
srvtype text 服务器的类型(可选)
srvversion text 服务器的版本(可选)
srvacl aclitem[] 访问权限
srvoptions text[] 外部服务器特定选项,以“keyword=value”字符串形式
olnkusingstring text 保存了创建dblink时的连接字符串信息
olnksviname text dblink的服务名称

PG_OBJECT

列名 类型 说明
obj_oid oid 对象的oid
objsubid integer 列属性(针对表的列的序号)
objname name 对象的名字
refclassid oid 存储该对象的系统表oid
schemaoid oid 对象schema
objkind char 对象类型:

‘r’:普通表

‘v’:视图

‘m’:物化视图

‘P’:分区表

‘F’:外部表

‘p’:存储过程

‘w’:窗口函数

‘f’:普通函数

‘a’:聚集函数

‘s’:模式

‘d’:数据库

‘t’:触发器

‘c’:列名称
compatible_mode char 对象是在那个兼容模式下创建的。

‘o’:ORACLE兼容模式下创建的对象

‘m’:MYSQL兼容模式下创建的对象

‘p’:PG模式下创建的对象
created timestamp 创建时间
modified timestamp 最新的修改时间
option jsonb 对象属性

PG_PACKAGE

列名 数据类型 引用 描述
OID OID 行标识符
PKGNAME NAME 包名称
PKGNAMESPACE OID 包命名空间
PKGOWNER OID 包所属用户
DEFINE_INVOK BOOL 指定包中函数、存储过程以及包规范中声明的显示游标的AUTHID
EDITABLE BOOL 对象是否是可编辑的
USE_COLLATION BOOL 使用字符串排序集
PKGACL ACLITEM[] 包访问权限列表
ACCESSSOURCE PG_NODE_TREE 指定可以调用该包的每个访问器
PKGSRC TEXT 包定义内容

PG_PACKAGE_BODY

列名 数据类型 引用 描述
OID OID 行标识符
PKGOID OID 包OID
BODYSRC TEXT 包体内容

PG_SEQUENCE

目录pg_sequence包含有关序列的信息。 一些序列的信息(例如名称和方案)放在pg_class中。

列名 数据类型 引用 描述
SEQRELID OID pg_class.oid 这个序列的pg_class项的OID
SEQTYPID OID pg_type.oid 序列的数据类型
SEQSTART INT8 序列的起始值
SEQINCREMENT INT8 序列的增量值
SEQMAX INT8 序列的最大值
SEQMIN INT8 序列的最小值
SEQCACHE INT8 序列的缓冲尺寸
SEQCYCLE BOOL 序列是否循环
FLAGS INT2 标志支持scale、extend、session选项。

DUAL

DUAL表属于SYS模式下的一个虚拟表,包含一列为DUMMY, 默认类型为VARCHAR2 (1)。从DUAL表中进行选择对于使用SELECT语句计算常量表达式很有用。表中仅有一行数据。

PG_RECYCLEBIN

表pg_recyclebin存储可回收对象的信息。该表在V9.0.5及以后的版本中支持。

列名 数据类型 引用 描述
OID OID 为回收对象自动生成的唯一oid
RCYBASEID OID pg_recyclebin.oid 回收对象所依赖的基表在pg_recyclebin表中的id
RCYRELID OID 对象的relation id
RCYNAME NAME 为回收对象生成的唯一名称
RCYORIGINNAME NAME 对象原始的名称
RCYOPERATION CHAR 操作类型:’t’ = TRUNCATE, ‘d’ = DROP
RCYTYPE SMALLINT 对象的类型:0 table, 1 index, 2 toast table, 3 toast index
RCYRECYCLETIME TIMESTAMP WITH TIME ZONE 对象被回收的时间
RCYNAMESPACE OID 对象所属的namespace的oid
RCYTABLESPACE OID 对象所属的tablespace的oid
RCYRELFILENODE OID 对象被回收的filenode的oid