PG中的系统表和系统视图(数据字典)

0    895    2

👉 本文共约20610个字,系统预计阅读时间或需78分钟。

系统表

大多数系统表都是在数据库创建的过程中从模版数据库中拷贝过来的,因此都是数据库相关的。少数表是在整个安装中物理上所有数据库共享的;这些表在独立的表的描述中用指明了。

查看数据库系统表命令

表名字 用途

  • pg_aggregate 聚集函数
  • pg_am 索引访问方法
  • pg_amop 访问方法操作符
  • pg_amproc 访问方法支持过程
  • pg_attrdef 字段缺省值
  • pg_attribute 表的列(也称为”属性”或”字段”)
  • pg_authid 认证标识符(角色)
  • pg_auth_members 认证标识符成员关系
  • pg_autovacuum 每个关系一个的自动清理配置参数
  • pg_cast 转换(数据类型转换)
  • pg_class 表、索引、序列、视图(“关系”)
  • pg_constraint 检查约束、唯一约束、主键约束、外键约束
  • pg_conversion 编码转换信息
  • pg_database 本集群内的数据库
  • pg_depend 数据库对象之间的依赖性
  • pg_description 数据库对象的描述或注释
  • pg_index 附加的索引信息
  • pg_inherits 表继承层次
  • pg_language 用于写函数的语言
  • pg_largeobject 大对象
  • pg_listener 异步通知
  • pg_namespace 模式
  • pg_opclass 索引访问方法操作符类
  • pg_operator 操作符
  • pg_pltemplate 过程语言使用的模板数据
  • pg_proc 函数和过程
  • pg_rewrite 查询重写规则
  • pg_shdepend 在共享对象上的依赖性
  • pg_shdescription 共享对象上的注释
  • pg_statistic 优化器统计
  • pg_tablespace 这个数据库集群里面的表空间
  • pg_trigger 触发器
  • pg_type 数据类型

pg_class

查询所有业务表信息

查询所有业务表名称及表描述

查询某表的字段信息

 pg_class (系统表:对象)是一个对象表,表的每个字段都是‘rel’开头,分明就是 ‘relation’这个单词的缩写,意思就是‘关系’。表中relkind字段决定对象类型:r = 普通表,i = 索引,S = 序列,v = 视图, c = 复合类型,s = 特殊,t = TOAST表。对象所属的relnamespace(模式名称)和relowner(所有者)都是用其对应的oid显示,所以要直观看到实际本名要联合pg_namespace(系统表:模式)和pg_roles(系统视图:角色)一起查,这两个表和视图中都有oid字段。

该系统表记录了数据表、索引(仍然需要参阅pg_index)、序列、视图、复合类型和一些特殊关系类型的元数据。注意:不是所有字段对所有对象类型都有意义。

名称类型参考描述
oidoid行标识符(隐藏属性;必须明确选择)
relnamename表格,索引,视图等的名称
relnamespaceoidpg_namespace.oid包含此relation的名称空间的oid
reltypeoidpg_type .oid与此表行类型对应的数据类型的oid(如果有的话)(对于没有pg_type条目的索引,为零 )
reloftypeoidpg_type .oid对于类型表,基础复合类型的oid,对于所有其他relation为零
relowneroidpg_authid.oidrelation的所有者
relamoidpg_am.oid如果这是一个索引,则使用的访问方法(B-树,散列等)
relfilenodeoid该relation的磁盘文件的名称; 零表示这是一个“映射”relation,其磁盘文件名由低级状态决定
reltablespaceoidpg_tablespace.oid存储该relation的表空间。如果为零,则隐含数据库的默认表空间。(如果relation没有磁盘上的文件,则无意义。)
relpagesint4该表的磁盘表示的大小(页面大小为BLCKSZ)。这只是计划者使用的估计值。它由 VACUUM,ANALYZE和一些DDL命令(如 CREATE INDEX)更新。
reltuplesfloat4表中的行数。这只是计划者使用的估计值。它由VACUUM,ANALYZE和一些DDL命令(如CREATE INDEX)更新。
relallvisibleint4在表格的可见性图中标记为全部可见的页面数。这只是计划者使用的估计值。它由VACUUM,ANALYZE和一些DDL命令(如CREATE INDEX)更新。
reltoastrelidoidpg_class .oid与此表关联的TOAST表的oid,如果没有,则为0。TOAST表在“辅助表”中存储“超出行”的大型属性 。
relhasindexbool如果这是一个表并且它有(或最近有)任何索引,则为真
relissharedbool如果此表在群集中的所有数据库之间共享,则为true。只有某些系统目录(如 pg_database)被共享。
relpersistencecharp =永久表, u =未记录表,t =临时表
relkindcharr = 普通表, i = 索引, S = 序列, t = TOAST表, v = 视图, m = 物化视图, c = 组合类型, f = 外部表, p = 分区表, I = 分区索引
relnattsint2relation中的用户列数(系统列未计数)。pg_attribute中必须有许多相应的条目。另见pg_attribute.attnum。
relchecksint2表上CHECK约束的数量; 请参阅pg_constraint目录
relhasoidsbool如果我们为relation的每一行生成oid,则为真
relhaspkeybool如果表具有(或曾经有)主键,则为真
relhasrulesbool如果表具有(或曾经有)规则,则为真; 请参阅pg_rewrite目录
relhastriggersbool如果表具有(或曾经有)触发器,则为真; 请参阅 pg_trigger目录
relhassubclassbool如果表有(或曾经有过)任何继承孩子,则为真
relrowsecuritybool如果表已启用行级安全性,则为true; 请参阅 pg_policy目录
relforcerowsecuritybool如果行级别安全性(启用时)也为true,则也适用于表所有者; 请参阅pg_policy目录
relispopulatedbool如果relation被填充,则为真(对于除某些实例化视图之外的所有relation都是如此)
relreplidentchar用于为行构成“副本标识”的列:d = default(主键,如果有的话),n =无,f =所有列 i =具有indisreplident set的索引或default
relfrozenxidxid在此表之前的所有交易ID已被替换为永久(“冻结”)交易ID。这用于跟踪是否需要将表抽真空以防止事务ID环绕或允许缩小pg_clog。零(InvalidTransactionId)如果relation不是一个表。
relminmxidxid在此表之前的所有多重作业ID已由该事务ID替换。这用于跟踪是否需要将表抽真空以防止多轴实现ID 绕回或允许缩小pg_multixact。零(InvalidMultiXactId)如果relation不是一个表。
relaclaclitem[]访问权限; 看到GRANTREVOKE的细节
reloptionstext[]特定于访问方法的选项,如“keyword = value”字符串

pg_attribute

该系统表存储所有表(包括系统表,如pg_class)的字段信息。数据库中的每个表的每个字段在pg_attribute表中都有一行记录。

另外,查询列信息也可以使用information_schema.columns视图。

名字类型引用描述
attrelidoidpg_class.oid此字段所属的表。
attnamename字段名。
atttypidoidpg_type.oid字段的数据类型。
attstattargetint4attstattarget控制ANALYZE为这个字段设置的统计细节的级别。零值表示不收集统计信息,负数表示使用系统缺省的统计对象。正数值的确切信息是和数据类型相关的。
attlenint2该字段所属类型的长度。(pg_type.typlen的拷贝)
attnumint2字段的编号,普通字段是从1开始计数的。系统字段,如oid,是任意的负数。
attndimsint4如果该字段是数组,该值表示数组的维数,否则是0。
attcacheoffint4在磁盘上总是-1,但是如果装载入内存中的行描述器中, 它可能会被更新为缓冲在行中字段的偏移量。
atttypmodint4表示数据表在创建时提供的类型相关的数据(比如,varchar字段的最大长度)。其值对那些不需要atttypmod的类型而言通常为-1。
attbyvalboolpg_type.typbyval字段值的拷贝。
attstoragecharpg_type.typstorage字段值的拷贝。
attaligncharpg_type.typalign字段值的拷贝。
attnotnullbool如果该字段带有非空约束,则为真,否则为假。
atthasdefbool该字段是否存在缺省值,此时它对应pg_attrdef表里实际定义此值的记录。
attisdroppedbool该字段是否已经被删除。如果被删除,该字段在物理上仍然存在表中,但会被分析器忽略,因此不能再通过SQL访问。
attislocalbool该字段是否局部定义在对象中的。
attinhcountint4该字段所拥有的直接祖先的个数。如果一个字段的祖先个数非零,那么它就不能被删除或重命名。

pg_attrdef

该系统表主要存储字段缺省值,字段中的主要信息存放在pg_attribute系统表中。注意:只有明确声明了缺省值的字段在该表中才会有记录。

名字类型引用描述
adrelidoidpg_class.oid这个字段所属的表
adnumint2pg_attribute.attnum字段编号,其规则等同于pg_attribute.attnum
adbintext字段缺省值的内部表现形式。
adsrctext缺省值的人可读的表现形式。

pg_authid

该系统表存储有关数据库认证的角色信息,在PostgreSQL中角色可以表现为用户和组两种形式。对于用户而言只是设置了rolcanlogin标志的角色。由于该表包含口令数据,所以它不是公共可读的。PostgreSQL中提供了另外一个建立在该表之上的系统视图pg_roles,该视图将口令字段填成空白。

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
名字类型引用描述
rolnamename角色名称。
rolsuperbool角色是否拥有超级用户权限。
rolcreaterolebool角色是否可以创建其它角色。
rolcreatedbbool角色是否可以创建数据库。
rolcatupdatebool角色是否可以直接更新系统表(如果该设置为假,即使超级用户也不能更新系统表)。
rolcanloginbool角色是否可以登录,换句话说,这个角色是否可以给予会话认证标识符。
rolpasswordtext口令(可能是加密的);如果没有则为NULL。
rolvaliduntiltimestamptz口令失效时间(只用于口令认证);如果没有失效期,则为NULL。
rolconfigtext[]运行时配置变量的会话缺省。

pg_auth_members

该系统表存储角色之间的成员关系。

名字类型引用描述
roleidoidpg_authid.oid组角色的ID。
memberoidpg_authid.oid属于组角色roleid的成员角色的ID。
grantoroidpg_authid.oid赋予此成员关系的角色的ID。
admin_optionbool如果具有把其它成员角色加入组角色的权限,则为真。

pg_constraint

该系统表存储PostgreSQL中表对象的检查约束、主键、唯一约束和外键约束。

名字类型引用描述
connamename约束名字(不一定是唯一的)。
connamespaceoidpg_namespace.oid包含这个约束的名字空间(模式)的OID。
contypecharc = 检查约束, f = 外键约束, p = 主键约束, u = 唯一约束
condeferrablebool该约束是否可以推迟。
condeferredbool缺省时这个约束是否是推迟的?
conrelidoidpg_class.oid该约束所在的表,如果不是表约束则为0。
contypidoidpg_type.oid该约束所在的域,如果不是域约束则为0。
confrelidoidpg_class.oid如果为外键,则指向参照的表,否则为0。
confupdtypechar外键更新动作代码。
confdeltypechar外键删除动作代码。
confmatchtypechar外键匹配类型。
conkeyint2[]pg_attribute.attnum如果是表约束,则是约束控制的字段列表。
confkeyint2[]pg_attribute.attnum如果是外键,则是参照字段的列表。
conbintext如果是检查约束,则表示表达式的内部形式。
consrctext如果是检查约束,则是表达式的人可读的形式。

pg_tablespace

该系统表存储表空间的信息。注意:表可以放在特定的表空间里,以帮助管理磁盘布局和解决IO瓶颈。

名字类型引用描述
spcnamename表空间名称。
spcowneroidpg_authid.oid表空间的所有者,通常是创建它的角色。
spclocationtext表空间的位置(目录路径)。
spcaclaclitem[]访问权限。

pg_namespace

该系统表存储名字空间(模式)。

名字类型引用描述
nspnamename名字空间(模式)的名称。
nspowneroidpg_authid.oid名字空间(模式)的所有者
nspaclaclitem[]访问权限。

pg_database

该系统表存储数据库的信息。和大多数系统表不同的是,在一个集群里该表是所有数据库共享的,即每个集群只有一份pg_database拷贝,而不是每个数据库一份。

名字类型引用描述
datnamename数据库名称。
datdbaoidpg_authid.oid数据库所有者,通常为创建该数据库的角色。
encodingint4数据库的字符编码方式。
datistemplatebool如果为真,此数据库可以用于CREATE DATABASE TEMPLATE子句,把新数据库创建为此数据库的克隆。
datallowconnbool如果为假,则没有人可以联接到这个数据库。
datlastsysoidoid数据库里最后一个系统OID,此值对pg_dump特别有用。
datvacuumxidxid
datfrozenxidxid
dattablespacetextpg_tablespace.oid该数据库的缺省表空间。在这个数据库里,所有pg_class.reltablespace为零的表都将保存在这个表空间里,特别要指出的是,所有非共享的系统表也都存放在这里。
datconfigtext[]运行时配置变量的会话缺省值。
dataclaclitem[]访问权限。

pg_index

该系统表存储关于索引的一部分信息。其它的信息大多数存储在pg_class。

名字类型引用描述
indexrelidoidpg_class.oid该索引在pg_class里的记录的OID。
indrelidoidpg_class.oid索引所在表在pg_class里的记录的OID。
indnattsint2索引中的字段数量(拷贝的pg_class.relnatts)。
indisuniquebool如果为真,该索引是唯一索引。
indisprimarybool如果为真,该索引为该表的主键。
indisclusteredbool如果为真,那么该表在这个索引上建了簇。
indkeyint2vectorpg_attribute.attnum该数组的元素数量为indnatts,数组元素值表示建立这个索引时所依赖的字段编号,如1 3,表示第一个字段和第三个字段构成这个索引的键值。如果为0,则表示是表达式索引,而不是基于简单字段的索引。
indclassoidvectorpg_opclass.oid对于构成索引键值的每个字段,这个字段都包含一个指向所使用的操作符表的OID。
indexprstext表达式树用于那些非简单字段引用的索引属性。它是一个列表,在indkey里面的每个零条目一个元素。如果所有索引属性都是简单的引用,则为空。
indpredtext部分索引断言的表达式树。如果不是部分索引, 则是空字串。

见如下应用示例:

pg_statistic

目录pg_statistic存储有关数据库内容的统计数据。其中的项由ANALYZE创建,查询规划器会使用这些数据来进行查询规划。注意所有的统计数据天然就是近似的,即使它刚刚被更新。

通常对于数据表中一个已经被 ANALYZE 过的列,在本目录中会存在一个stainherit = false的项。如果该列所在的表具有后代(即有其他表继承该表),对于该列还会创建第二个stainherit = true的项。stainherit = true的项表示列在整个继承树上的统计数据,即通过SELECT *column* FROM *table**看到的数据的统计,而stainherit = false的项表示对SELECT *column* FROM ONLY *table*的结果的统计。

pg_statistic也存储关于索引表达式值的统计数据,就好像它们是真正的数据列,但在这种情况中starelid指索引。对一个普通非表达式索引列不会创建项,因为它将是底层表列的项的冗余。当前,索引表达式的项都具有stainherit = false

因为不同类型的统计信息适用于不同类型的数据, pg_statistic 被设计成不太在意自己存储的是什么类型的统计。 只有极为常用的统计信息(比如NULL的含量)才在pg_statistic里给予专用的字段。 其它所有东西都存储在“槽位”中,而槽位是一组相关的列, 它们的内容用槽位中的一个列里的代码表示。 更详细的信息请参阅 src/include/catalog/pg_statistic.h

pg_statistic不应该是公共可读的,因为即使是一个表内容的统计性信息也可能被认为是敏感的(例子:一个薪水列的最大和最小值可能是非常有趣的)。pg_statspg_statistic上的一个公共可读的视图,它只会显示出当前用户可读的表的信息。

pg_statistic Columns

列类型描述
starelid oid (references pg_class.oid)被描述列所属的表或索引
staattnum int2 (references pg_attribute.attnum)被描述列的编号
stainherit bool如果为真,统计包含了继承后代的列而不仅仅是指定关系的列
stanullfrac float4列的项为空的比例
stawidth int4非空项的平均存储宽度,以字节计
stadistinct float4列中非空唯一值的数目。一个大于零的值是唯一值的真正数目。 一个小于零的值是表中行数的乘数的负值;例如,对于一个 80% 的值为非空且每个非空值平均出现两次的列,可以表示为stadistinct = -0.4。一个0值表示唯一值的数目未知。
stakindN int2一个代码,它表示存储在该pg_statistic行中第*N*个“槽位”的统计类型。
staop*N oid (references [pg_operator](http://postgres.cn/docs/13/catalog-pg-operator.html).oid)一个用于生成这些存储在第*N*个“槽位”的统计信息的操作符。 比如,一个柱面图槽位会用操作符,该操作符定义了该数据的排序顺序。
stacollN oid (references [pg_collation](http://postgres.cn/docs/13/catalog-pg-collation.html).oid)排序规则用于导出存储在第*N*个“槽”中的统计信息。 例如,可排序列的直方图槽将显示定义数据排序顺序的排序规则。对于不可整理数据,为零。
stanumbersN float4[]第*N`个“槽位”的类型的数值类型统计, 如果该槽位不涉及数值类型则为NULL
stavaluesN anyarray第*N*个“槽位”的类型的列值,如果该槽位类型不存储任何数据值则为 NULL。 每个数组的元素值实际上都是指定列的数据类型或者是一个相关类型(如数组元素类型), 因此,除了把这些列的类型定义成anyarray`之外别无他法。

系统视图

除了系统表之外,PostgreSQL 还提供了一系列内置的视图。 系统视图提供了查询系统表的一些便利的访问方法。 其它一些视图提供了访问内部服务器状态的方法。

  信息模式提供了另外一套视图,它的功能覆盖了系统视图的功能。因为信息模式是 SQL 标准,而这里描述的视图是 PostgreSQL 特有的,所以最好用信息模式来获取自己需要的所有信息。

  下面列出了这里描述的所有系统视图。下面是每个视图更详细的信息。有些视图提供了对统计收集器的结果的访问;

  除了特别声明的,这里描述的所有视图都是只读的。

pg_user是在视图pg_shadow上面建的一个视图,其中隐藏了密码。

在pg数据库中有很多的系统视图,学习pg需要了解这些视图,pg中大部分视图都是以pg_开头的,查看所有的系统视图的命令如下

(1)系统视图

视图名称描述
pg_available_extensions可用的扩展
pg_available_extension_versions所有版本的扩展
pg_config编译时配置参数
pg_cursors打开的游标
pg_file_settings配置文件内容摘要
pg_group数据库用户组
pg_hba_file_rules客户端认证配置文件内容摘要
pg_indexes索引
pg_locks当前保持或者等待的锁
pg_matviews物化视图
pg_policies策略
pg_prepared_statements预备好的语句
pg_prepared_xacts预备好的事务
pg_publication_tables发布及其相关表格
pg_replication_origin_status有关复制源的信息,包括复制进度
pg_replication_slots复制槽信息
pg_roles数据库角色
pg_rules规则
pg_seclabels安全标签
pg_sequences序列
pg_settings参数设置
pg_shadow数据库用户
pg_stats规划器统计信息
pg_tables
pg_timezone_abbrevs时区简写
pg_timezone_names时区名字
pg_user数据库用户
pg_user_mappings用户映射
pg_views视图

(2)动态统计视图

视图名称描述
pg_stat_activity每个服务器进程一行,显示与那个进程的当前活动相关的信息,例如状态和当前查询。
pg_stat_replication每一个 WAL 发送进程一行,显示有关到该发送进程 连接的后备服务器的复制的统计信息。
pg_stat_wal_receiver只有一行,显示来自 WAL 接收器所连接服务器的有关该接收器的统计信息。
pg_stat_subscription每个订阅至少一行,显示订阅工作者的相关信息。详细信息,
pg_stat_ssl每个连接(常规连接和复制连接)一行, 显示有关在此连接上使用的 SSL 的信息。
pg_stat_progress_vacuum每个运行VACUUM的后端(包括 autovacuum工作者进程)一行, 显示当前的进度。

(3)已收集统计信息的视图

视图名称描述
pg_stat_archiver只有一行,显示有关 WAL 归档进程活动的统计信息。
pg_stat_bgwriter只有一行,显示有关后台写进程的活动的统计信息。
pg_stat_database每个数据库一行,显示数据库范围的统计信息。
pg_stat_database_conflicts每个数据库一行,显示数据库范围的统计信息, 这些信息的内容是关于由于与后备服务器的恢复过程 发生冲突而被取消的查询。
pg_stat_all_tables当前数据库中每个表一行,显示有关访问指定表的统计信息。详见pg_stat_all_tables。
pg_stat_sys_tables和pg_stat_all_tables一样,但只显示系统表。
pg_stat_user_tables和pg_stat_all_tables一样,但只显示用户表。
pg_stat_xact_all_tables和pg_stat_all_tables相似,但计数动作只在当前事务内发生(还没有被包括在pg_stat_all_tables和相关视图中)用于生存和死亡行数量的列以及清理和分析动作在此视图中不出现。
pg_stat_xact_sys_tables和pg_stat_xact_all_tables一样,但只显示系统表。
pg_stat_xact_user_tables和pg_stat_xact_all_tables一样,但只显示用户表。
pg_stat_all_indexes当前数据库中的每个索引一行,显示:表OID、索引OID、模式名、表名、索引名、 使用了该索引的索引扫描总数、索引扫描返回的索引记录数、使用该索引的简 单索引扫描抓取的活表(livetable)中数据行数。当前数据库中的每个索引一行,显示与访问指定索引有关的统计信息。
pg_stat_sys_indexes和pg_stat_all_indexes一样,但只显示系统表上的索引。
pg_stat_user_indexes和pg_stat_all_indexes一样,但只显示用户表上的索引。
pg_statio_all_tables当前数据库中每个表一行(包括TOAST表),显示:表OID、模式名、表名、 从该表中读取的磁盘块总数、缓冲区命中次数、该表上所有索引的磁盘块读取总数、 该表上所有索引的缓冲区命中总数、在该表的辅助TOAST表(如果存在)上的磁盘块读取总数、 在该表的辅助TOAST表(如果存在)上的缓冲区命中总数、TOAST表的索引的磁盘块读 取总数、TOAST表的索引的缓冲区命中总数。 当前数据库中的每个表一行,显示有关在指定表上 I/O的统计信息。
pg_statio_sys_tables和pg_statio_all_tables一样,但只显示系统表。
pg_statio_user_tables和pg_statio_all_tables一样,但只显示用户表。
pg_statio_all_indexes当前数据库中每个索引一行,显示:表OID、索引OID、模式名、 表名、索引名、该索引的磁盘块读取总数、该索引的缓冲区命中总数。 当前数据库中的每个索引一行,显示与指定索引上的 I/O 有关的统计信息。详见pg_statio_all_indexes。
pg_statio_sys_indexes和pg_statio_all_indexes一样,但只显示系统表上的索引。
pg_statio_user_indexes和pg_statio_all_indexes一样,但只显示用户表上的索引。
pg_statio_all_sequences当前数据库中每个序列对象一行,显示:序列OID、模式名、序列名、序列的磁盘读取总数、序列的缓冲区命中总数。 当前数据库中的每个序列一行,显示与指定序列上的 I/O 有关的统计信息。
pg_statio_sys_sequences和pg_statio_all_sequences一样,但只显示系统序列(目前没有定义系统序列,因此这个视图总是为空)。
pg_statio_user_sequences和pg_statio_all_sequences一样,但只显示用户序列。
pg_stat_user_functions对于所有跟踪功能,函数的OID,模式,名称,数量 通话总时间,和自我的时间。自我时间是 在函数本身所花费的时间量,总时间包括 它调用函数所花费的时间。时间值以毫秒为单位。每一个被跟踪的函数一行,显示与执行该函数有关的统计信息。
pg_stat_xact_user_functions和pg_stat_user_functions相似,但是只统计在当前事务期间的调用(还没有被包括在pg_stat_user_functions中)

(4)PG中常用的系统视图

1、pg_tables:

该视图提供了对有关数据库中每个表的有用信息地访问。

字段名类型引用描述
schemanamenamepg_namespace.nspname包含表的模式名字。
tablenamenamepg_class.relname表的名字。
tableownernamepg_authid.rolname表的所有者的名字。
tablespacenamepg_tablespace.spcname包含表的表空间名字(如果是数据库缺省,则为 NULL)。
hasindexesboolpg_class.relhasindex如果表拥有(或者最近拥有)任何索引,则为真。
hasrulesboolpg_class.relhasrules如果表存在规则,则为真。
hastriggersboolpg_class.reltriggers如果表有触发器,则为真。

2、pg_indexes:

该视图提供对数据库中每个索引的有用信息的访问。

字段名类型引用描述
schemanamenamepg_namespace.nspname包含表和索引的模式的名字。
tablenamenamepg_class.relname索引所在表的名字。
indexnamenamepg_class.relname索引的名字。
tablespacenamepg_tablespace.spcname包含索引的表空间名字(如果是数据库缺省,则为NULL)。
indexdeftext索引定义(一个重建的创建命令)。

3、pg_views:

该视图提供了对数据库里每个视图的有用信息的访问途径。

字段名类型引用描述
schemanamenamepg_namespace.nspname包含此视图的模式名字。
viewnamenamepg_class.relname视图的名字。
viewownernamepg_authid.rolname视图的所有者的名字。
definitiontext视图定义(一个重建的SELECT查询)。

4、pg_user:

该视图提供了对数据库用户的相关信息的访问。 这个视图只是pg_shadow表的公众可读的部分的视图化,但是不包含口令字段。

字段名类型引用描述
usenamename用户名。
usesysidint4用户ID(用于引用这个用户的任意数字)。
usecreatedbbool用户是否可以创建数据库。
usesuperbool用户是否是一个超级用户。
usecatupdbool用户是否可以更新系统表。(即使超级用户也不能这么干,除非这个字段为真。)
passwdtext口令(可能加密了)。
valuntilabstime口令失效的时间(只用于口令认证)。
useconfigtext[]运行时配置参数的会话缺省。

5、pg_roles:

该视图提供访问数据库角色有关信息的接口。这个视图只是pg_authid表的公开可读部分的视图化,同时把口令字段用空白填充。

字段名类型引用描述
rolnamename角色名。
rolsuperbool是否有超级用户权限的角色。
rolcreaterolebool是否可以创建更多角色的角色。
rolcreatedbbool是否可以创建数据库的角色。
rolcatupdatebool是否可以直接更新系统表的角色。
rolcanloginbool如果为真,表示是可以登录的角色。
rolpasswordtext不是口令(总是 ****)。
rolvaliduntiltimestamptz口令失效日期(只用于口令认证);如果没有失效期,为NULL。
rolconfigtext[]运行时配置变量的会话缺省。

6、pg_rules:

该视图提供对查询重写规则的有用信息访问的接口。

字段名类型引用描述
schemanamenamepg_namespace.nspname包含表的模式的名字。
tablenamenamepg_class.relname规则施加影响的表的名字。
rulenamenamepg_rewrite.rulename规则的名字。
definitiontext规则定义(一个重新构造的创建命令)。

7、pg_settings:

该视图提供了对服务器运行时参数的访问。它实际上是SHOW和SET命令的另外一种方式。它还提供一些用SHOW不能直接获取的参数的访问,比如最大和最小值。

字段名类型引用描述
nametext运行时配置参数名。
settingtext参数的当前值。
categorytext参数的逻辑组。
short_desctext参数的一个简短的描述。
extra_desctext有关参数的额外的、更详细的信息。
contexttext设置这个参数的值要求的环境。
vartypetext参数类型(bool、integer、real和string)。
sourcetext当前参数值的来源。
min_valtext该参数允许的最小值(非数字值为NULL)。
max_valtext该参数允许的最大值(非数字值为NULL)。

我们不能对pg_settings视图进行插入或者删除, 只能更新。
对pg_settings中的一行进行UPDATE等效于在该命名参数上执行SET命令。这个修改值影响当前会话使用的数值。
如果在一个最后退出的事务中发出了UPDATE命令,那么UPDATE命令的效果将在事务回滚之后消失。一旦包围它的事务提交,这个效果将固化,直到会话结束。

PostgreSQL 12新视图

PostgreSQL 12新增的系统表:

pg_stat_progress_cluster:显示cluster语句或者vacuum full语句的执行状态

pg_stat_progress_create_index:显示create index语句的执行状态

pg_stat_gssapi:显示connections是否使用GSSAPI authentication与encryption信息

pg_statistic_ext_data:保存了create statistics语句创建的statistics object,该视图不应该被the public读取,因为该视图的内容可能是敏感的。该系统表只能用superuser查询,否则会有如下的错误:

pg_stats_ext是一个公有的可读的view(这是PG12新建立的view),该view是基于pg_statistic_ext_data和pg_statistic_ext的关联的,该视图包括被current user看到的table和columns信息。

information_schema

其中information_schema是方便用户查看表/视图/函数信息提供的,它大多是视图,MySQL,SQL Server同样有information_schema这个schema。 通过查看information_chema.tables, information_schema.columns可以方便的获取表/字段信息。
pg_catalog是系统Schema,包含了系统的自带函数/数据类型定义等,pg_catalog是保障postgres正常运转的重要基石。

Information_schema自动的存在于每个database中,里面包含了数据库中所有对象的定义信息。

Information_schema默认不存在于任何用户的search_path中,所以对所有用户都是隐藏的。\dn看不到,通过pgAdmin等客户端工具也不会自动显示。因此访问这个schema的任何视图都需要加上schema名。当然也可以通过修改search_path参数来访问。但PG不推荐这样做,因为里面的视图名称可能会跟用户应用程序中的对象名冲突。

Information_schema中的视图使用了几种特别的数据类型,如:cardinal_number 非负整数,yes_or_no相当于boolean

Informationschema中的视图基本都有权限校验,特定的用户只能看到特定的信息,也就是相当于Oracle中all*开头的视图。其中几个重要的视图如下:

表信息:information_schema.tables ,相当于Oracle中的all_tables

字段信息:information_schema.columns,相当于Oracle中的all_tab_cloumns

procedure/function:routines, 不包括package,因为pg不支持package

约束信息:

information_schema.table_constraints。另外在constraint_column_usage视图中有约束相关的字段信息;在referential_constraints中有关于外键约束的进一步的信息;在check_constraints中有关于check约束的进一步信息。key_column_usage记录了除check约束之外的其他约束相关的字段信息(check约束在check_constraints中已有记录)。

注意这个table_constraints不要跟constraint_table_usage搞混了。前者是记录了所有约束;而后者是记录了所有有相关约束的表(当然也有约束名显示),但不包括check约束。所以后者在我看来是没什么用的

权限信息:

table_privileges中记录了表权限,column_privileges中记录了列上的权限,routine_privileges上记录了function/procedure的权限,role_usage_grants记录了sequence/domain等类型的对象的usage权限,跟usage_privileges类似

在命令号里,\dp或\z也可以看到相关对象的授权信息

视图信息:

Views中记录视图基础信息,view_table_usage记录视图所依赖的表,view_routine_usage记录所依赖的function, view_column_usage记录所涉及的字段

另外sequece/trigger/schema等都有相关视图,要用到时直接查就好了。所以现在整个逻辑结构都差不多有答案了

注释

表的注释可以通过 obj_description 函数获取, 列的注释通过col_description函数获取。

参考:https://www.xmmup.com/pgzhongtianjiahechaxunzhushicomment.html

    头像

    小麦苗

    学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

    您可能还喜欢...

    发表评论

    您的电子邮箱地址不会被公开。

    2 × 5 =

     

    嘿,我是小麦,需要帮助随时找我哦
    • 18509239930
    • 个人微信

    • 麦老师QQ聊天
    • 个人邮箱
    • 点击加入QQ群
    • 个人微店

    • 回到顶部
    返回顶部