上一篇介绍了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”,这也是对参数新增的权限简称。
新增系统表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乐知乐享交流群,欢迎关注我文章的小伙伴加我微信进群吹牛唠嗑,交流技术。