暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

PostgreSQL 15新版本余晖:新增的系统表、视图、函数

原创 多米爸比 2022-10-22
1220

上一篇介绍了PostgreSQL 15的参数变化:<<PostgreSQL 15新版本余晖:参数变化>>

本文接着介绍PostgreSQL 15新增的系统表、系统视图和系统函数。

一、系统表

新增系统表pg_parameter_acl记录用户被授权的参数。

在PostgreSQL 15之前,set命令只能修改部分参数的值,有些Superuser级别的参数不能修改。alter system命令也是如此。

PostgreSQL 15里需要Superuser权限才可以设置的参数现在可通过grant set和grant alter system下放权限给普通用户,示例如下:

postgres=# create user dba;
CREATE ROLE
postgres=# grant set on parameter log_checkpoints to dba;
GRANT
postgres=# grant alter system on parameter archive_mode to dba;
GRANT

通过上面的设置,普通用户dba可以使用set命令来设置log_checkpoints,也可以使用alter system设置archive_mode归档开关。

用户被授权的参数信息可以通过pg_parameter_acl表查询:

postgres=# select parname,paracl from pg_parameter_acl ;
     parname     |                paracl                 
-----------------+---------------------------------------
 log_checkpoints | {postgres=sA/postgres,dba=s/postgres}
 archive_mode    | {postgres=sA/postgres,dba=A/postgres}
(2 rows)

我们可能会注意到上面的“sA”或者“s”或者“A”,这也是对参数新增的权限简称。

image.png

新增系统表pg_publication_namespace记录模式和发布之间的映射关系

PostgreSQL 15逻辑复制的发布语法现在支持对schema下所有表进行发布,参考示例如下:

logical_src=# create publication pub_s3 for tables in schema s3; 
CREATE PUBLICATION

模式和发布之间是多对多的关系,一个publication可以发布多个schema,一个schema也可被创建到多个publication下,它们之间的映射关系可以通过pg_publication_namespace查询:

logical_src=# select pnpubid,pnnspid::regnamespace from pg_publication_namespace;
 pnpubid | pnnspid 
---------+---------
   24633 | s3
(1 row)

pnpubid是发布表的主键,pnnspid对应pg_namespace的主键。

二、系统视图

新增视图pg_ident_file_mappings记录ident认证方式的映射内容。

pg_hba.conf文件的配置内容可以通过系统视图pg_hba_file_rules查看,但是pg_hba.conf文件嵌套引用包含的文件pg_ident.conf文件没有系统视图可以查看。

PostgreSQL 15增加了pg_ident_file_mappings视图来查看pg_ident.conf文件详细map映射内容。

postgres=# select * from pg_ident_file_mappings ;
 line_number | map_name | sys_name | pg_username | error 
-------------+----------+----------+-------------+-------
           2 | map1     | postgres | dba         | 
(1 row)

通过该视图的定义可以发现它是通过pg_ident_file_mappings()函数实现:

postgres=# \sv pg_ident_file_mappings 
CREATE OR REPLACE VIEW pg_catalog.pg_ident_file_mappings AS
 SELECT a.line_number,
    a.map_name,
    a.sys_name,
    a.pg_username,
    a.error
   FROM pg_ident_file_mappings() 
        a(line_number, map_name, sys_name, pg_username, error)

新增视图pg_stat_subscription_stats记录订阅统计信息。

该视图对订阅在初始同步表数据和apply应用时发生错误的次数进行统计。

通过该视图的定义可以发现它是通过pg_stat_get_subscription_stats()函数实现:

postgres=# \sv pg_stat_subscription_stats
CREATE OR REPLACE VIEW pg_catalog.pg_stat_subscription_stats AS
 SELECT ss.subid,
    s.subname,
    ss.apply_error_count,
    ss.sync_error_count,
    ss.stats_reset
   FROM pg_subscription s,
    LATERAL pg_stat_get_subscription_stats(s.oid) 
            ss(subid, apply_error_count, sync_error_count, stats_reset)

新增视图pg_stat_recovery_prefetch观测数据库recovery预取信息。

PostgreSQL 15新增了recovery_prefetch参数,该参数在数据库recovery期间,对WAL的处理增加一个预读取的功能。它可以指导系统内核在recovery之前对buffer pool中没有的数据块发起磁盘数据块的读取,从而降低IO等待时间。

该视图通过pg_stat_get_recovery_prefetch()函数实现:

postgres=# \sv pg_stat_recovery_prefetch
CREATE OR REPLACE VIEW pg_catalog.pg_stat_recovery_prefetch AS
 SELECT s.stats_reset,
    s.prefetch,
    s.hit,
    s.skip_init,
    s.skip_new,
    s.skip_fpw,
    s.skip_rep,
    s.wal_distance,
    s.block_distance,
    s.io_depth
   FROM pg_stat_get_recovery_prefetch() 
       s(stats_reset, prefetch, hit, skip_init, skip_new, 
         skip_fpw, skip_rep, wal_distance, block_distance, io_depth)

三、系统函数

新增几个字符串正则表达式函数。

  • regexp_count 返回正则匹配的次数
  • regexp_instr 返回正则第N次匹配的位置
  • regexp_like 正则模糊匹配
  • regexp_substr 使用字串进行正则匹配

新增系统信息函数

  • pg_settings_get_flags 获取参数的内部标识
  • has_parameter_privilege 判断用户对GUC参数是否具有set或者alter system授权

新增监控统计函数

  • pg_stat_reset_subscription_stats 重置系统视图pg_stat_subscription_stats订阅统计信息。

增加的系统管理函数

  • pg_backup_start 基础备份开始函数,由pg_start_backup重命名而来。
  • pg_backup_stop 基础备份结束函数,由pg_stop_backup重命名而来。
  • pg_ls_logicalsnapdir 查看PGDATA里pg_logical/snapshots目录的文件信息。
  • pg_ls_logicalmapdir 查看PGDATA里pg_logical/mappings目录的文件信息。
  • pg_ls_replslotdir 查看PGDATA里pg_replslot/slot_name目录的文件信息。
  • pg_get_wal_resource_managers 查看WAL的资源管理器列表(每个rmgr独立负责处理各自的)。
  • pg_database_collation_actual_version 显示数据库运行时collation版本,可检测collation是否与操作系统对齐,从而避免数据损坏。

保持联系

从2019年12月开始写第一篇文章,分享的初心一直在坚持,本人现在组建了一个PG乐知乐享交流群,欢迎关注我文章的小伙伴加我微信进群吹牛唠嗑,交流技术。

456.png

最后修改时间:2022-11-08 09:49:26
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论