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

[译文] PostgreSQL 15 来了(二)——系统目录差异

原创 通讯员 2022-05-24
1208

介绍

这次,我们来看看 PostgreSQL 14 和 PostgreSQL 15 的系统目录的区别。
这仍然是beta1版本,因此将来很有可能会发生变化,但是我用当前版本进行了调查。

调查方法

分别针对 PostgreSQL 14 和 PostgreSQL 15 执行以下步骤。

  • 使用 psql 登录
  • \o 使用文件名meta 命令指定输出目标文件
  • \a确保 meta 命令中没有用于格式化的空格。
  • 执行以下 SELECT 语句以终止 psql。


SELECT c.relname, attname, atttypid
FROM pg_class c JOIN pg_attribute a ON (a.attrelid = c.oid) JOIN pg_namespace ns ON (c.relnamespace = ns.oid)
WHERE ns.nspname = 'pg_catalog' AND c.relkind ='r'
ORDER BY c.relname, a.attname
;
复制

按关系名称和属性名称排序。(不敢按关系中属性的序号排序)

  • 退出 psql。
  • 区分 PostgreQSL 13 搜索结果文件和 PostgreSQL 14 搜索结果文件。

以相同的方式获取系统视图的差异(将SELECT 语句c.relkind = 'r'的部分v更改为)。


SELECT c.relname, attname, atttypid
FROM pg_class c JOIN pg_attribute a ON (a.attrelid = c.oid) JOIN pg_namespace ns ON (c.relnamespace = ns.oid)
WHERE ns.nspname = 'pg_catalog' AND c.relkind ='v'
ORDER BY c.relname, a.attname
;
复制

每个表/视图的更改摘要

系统表的每个表都没有新增,但系统视图有一些新增。

系统表

每个表都添加了pg_parameter_acl两个pg_publication_namespace新项目。

表名更改类型其他更正
pg_collation改变更改 collcollate 列和 collctype 列的类型(名称 → 文本)
添加 colliculocale 列
pg_constraint改变添加 confdelsetcols 列
pg_database改变datcollate 列、datctype 列的类型更改(名称 → 文本)
datcollversion 列、daticulocale 列、datlocprovider 列的添加 datlastsysoid 列的
删除
pg_index改变添加 indnullsnotdistinct 列
pg_parameter_acl添加一个系统表,记录一个或多个角色被授权的配置参数
pg_publication_namespace添加记录数据库中模式和发布之间的映射的系统表
pg_publication_rel改变添加 prattrs 列和 prqual 列
pg_statistic_ext_data改变retype stxdexpr 列(pg_statistic[] 相同,但类型oid 不同)
添加stxdinherit 列
pg_subscription改变添加 subdisableonerr 列、subskiplsn 列、subtwophasestate 列

系统视图

新增了三个系统视图: pg_ident_file_mappings、 。pg_stat_recovery_prefetchpg_stat_subscription_stats

查看名称更改类型其他更正
pg_ident_file_mappings添加提供 pg_ident.conf 内容摘要的系统视图
pg_stat_recovery_prefetch添加活动统计视图,提供有关恢复期间 WAL 预取的信息
pg_stat_subscription_stats添加一个活动统计视图,在反映到订阅时提供诸如错误数之类的信息。
pg_stats_ext改变添加继承列
pg_stats_ext_exprs改变添加继承列

变更详情

系统表

pg_collation

此系统表管理在 SQL 名称和操作系统区域设置类别之间建立基本对应关系的排序规则。CREATE COLLATION新定义的排序规则也在这里管理。

PostgreSQL 15 中添加了以下列。

列名数据类型解释
语言环境文字 文字此排序规则对象的 ICU 语言环境 ID。

pg_constraint

该系统表是管理非空约束以外的约束的系统表。

PostgreSQL 15 中添加了以下列。

列名数据类型解释
confdelsetcols整数2 []如果外键具有 SET NULL 或 SET DEFAULT 删除操作,则指定要更新的列。
如果为 NULL,则将更新所有引用的列。

pg_database

该系统表是管理有关数据库的各种信息的系统表。

PostgreSQL 15 中添加了以下列。

列名数据类型解释
数据收集版本文字 文字特定于提供者的排序规则版本。
在数据库创建过程中记录,在使用过程中检查,并用于检测导致数据损坏的排序规则定义更改。
本地化文字 文字此数据库的 ICU 区域设置 ID
数据提供者文字 文字(此时PostgreSQL文档中未提及)

此外,在 PostgreSQL 15 中,以下列已被删除。

列名数据类型解释
数据体系统样的数据库最终系统 OID。有一个描述是我以前用过的东西,但是去掉这个可能对 PostgreSQL
15有一些影响pg_dumppg_dump

pg_index

此系统表管理有关索引的一些信息。
PostgreSQL 15 中添加了以下列。

列名数据类型解释
indnullsnotdistinct布尔此列仅用于唯一索引。
如果为 false,则认为此唯一索引用于区分空值。
如果为真,则认为空值相等。
计划者会根据这条线做出任何决定吗?

pg_parameter_acl

从 PostgreSQL 15 添加的系统表。
此系统表管理一个或多个角色被授权的配置参数。.. 此处不管理具有默认权限的参数。
此外,与大多数系统目录不同,pg_parameter_acl 由集群中的所有数据库共享。

pg_parameter_acl 由以下列组成。

列名数据类型解释
样的样的此表的 ID。
参数名文字 文字要授予权限的配置参数名称。
参数访问 []访问权。

pg_publication_namespace

从 PostgreSQL 15 添加的系统表。
管理数据库中模式和发布之间的映射。
这是一个多对多映射。

pg_publication_namespace 由以下列组成。

列名数据类型解释
样的样的此表的 ID
pnpubid样的见出版物。
pnnspid样的架构参考。

pg_publication_rel

此系统表管理数据库中关系和发布的映射。
PostgreSQL 15 中添加了以下列。

列名数据类型解释
普拉特斯int2vector一个值数组,指示哪些表列是发布的一部分。空值意味着将发布所有列。
这是否意味着只能在逻辑上复制某些列?
prqualpg_node_tree表示发布者条件的树(nodeToString() 表示)。如果没有发布者要求,则为 NULL。

prattrs似乎与以下发行说明描述有关。

允许出版物仅限于特定栏目(Tomas Vondra、Álvaro Herrera、Rahila Syed)

prqual似乎与以下发行说明描述有关。

允许使用 WHERE 子句过滤发布内容(侯志杰、Euler Taveira、Peter Smith、Ajin Cherian、Tomas Vondra、Amit Kapila)

pg_statistic_ext_data

该系统表管理由 pg_statistic_ext 定义的规划器扩展统计的数据(CREATE STATISTICS认为它包含由命令创建的扩展统计)。
PostgreSQL 15 中添加了以下列。

列名数据类型解释
stxdinherit布尔值如果为 true,则统计信息不仅包括指定关系的值,还包括继承的子列。

pg_subscription

此系统表管理有关订阅定义的信息。
PostgreSQL 15 中添加了以下列。

列名数据类型解释
子禁用错误布尔值如果为 true,则如果其中一名工作人员检测到错误,订阅将被禁用。
我想知道是否必须将 CREATE SUBSCRIPTION 的命令更改为一组。
子跳跃pg_lsn事务结束以跳过更改 LSN(如果 LSN 有效),否则0/0
我想知道逻辑复制的更改跳过是否有一些变化。
亚两相状态字符两阶段模式状态码:d = 无效,p = 等待激活,e = 有效。
是否与围绕逻辑复制和两阶段提交的改进项目有关?需要确认。我不知道为什么
模具enum不见了。char

系统视图

pg_ident_file_mappings

PostgreSQL 15 中添加的视图。提供
客户端用户名映射配置文件内容的摘要。pg_ident.conf此视图显示文件中的每个非空、非注释行,并带有注释以指示规则是否已成功应用。
曾经有一个系统视图提供了 pg_hba.conf 内容的摘要,pg_hba_file_rules但它pg_ident.conf看起来像是它的一个版本。

pg_ident_file_mappings 由以下 5 列组成。

列名数据类型解释
电话号码整数4pg_ident.conf文件中的行数。
地图名称文字 文字映射的名称。
系统名称文字 文字发现的客户端的用户名。
pg_username文字 文字请求的 PostgreSQL 用户名。
错误文字 文字如果不为 NULL,则显示一条错误消息,说明为什么无法处理此行。

pg_stat_recovery_prefetch

从 PostgreSQL 15 添加的活动统计视图。
只有一条线。
wal_distance、block_distance 和 io_depth 列显示当前值,其他列显示可以使用 pg_stat_reset_shared 函数重置的累积计数器。
也许它会在恢复期间显示有关 WAL 预取的统计信息。

此活动统计视图由以下列组成。

列名数据类型解释
预取大整数由于不在缓冲池中而预取的块数。
大整数由于已经在缓冲池中而未预取的块数。
跳过初始化大整数由于初始化为零而未预取的块数。
跳过新大整数由于尚不存在而未预取的块数。
跳过_fpw大整数由于 WAL 包含整页图像而未预取的块数。
跳过代表大整数由于最近预取而未预取的块数。
wal_distance整数预取器向前看多少字节?
块距离整数预取器正在查看多少块。
io_depth整数已开始但尚未确认已完成的预取数。

您打算使用此活动统计视图进行哪种监控?

pg_stat_subscription_stats

从 PostgreSQL 15 添加的活动统计视图。
pg_stat_subscription_stats 视图中的每个订阅都有一行。

此活动统计视图由以下五列组成。

列名数据类型解释
子项样的订阅 OID。
子名姓名订阅名称。
应用错误计数大整数应用更改时发生错误的次数。
同步错误计数大整数初始表同步期间发生错误的次数。
stats_reset带时区的时间戳上次重置此统计信息的时间。

我必须考虑使用此方法进行逻辑复制的监视方法。

pg_stats_ext

此系统视图将存储的信息与数据库中的每个扩展统计对象的信息相结合,以提供对信息的访问pg_statistic_ext PostgreSQL 中添加了以下列:pg_statistic_ext_data

列名数据类型解释
遗传布尔值如果为 true,则该行包含继承的子列以及指定表中的值。(Maybe)
(Maybe) 因为此时 PostgreSQL 文档中没有提到它。

pg_stats_ext_exprs

此系统pg_statistic_ext视图pg_statistic_ext_data将存储的信息与扩展统计对象中包含的所有表达式的信息相结合,以提供对信息的访问。
PostgreSQL 15 中添加了以下列。

列名数据类型解释
遗传布尔值如果为 true,则该行包含继承的子列以及指定表中的值。(Maybe)
(Maybe) 因为此时 PostgreSQL 文档中没有提到它。

综上所述

在今天的调查时,许多差异尚不清楚,因此我想根据需要用其他功能调查结果对其进行补充。
另外,我认为PostgreSQL文档以后会修改和增加,所以我会不定期的修改这个调查内容。


文章来源:https://qiita.com/nuko_yokohama/items/72b261ac03c25f68c9c8

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

评论