pgSCV,一个与 Prometheus 兼容的 PostgreSQL 监控代理和指标导出器,已发布。
Pgpool-II 4.2.3、4.1.7、4.0.14、3.7.19 和 3.6.26,一个 PostgreSQL 的连接池和语句复制系统,已发布。
sqlite_fdw 1.2.0 已发布。
Crunchy PostgreSQL Operator 4.7.0,一个在 Kubernetes 上部署和管理开源 PostgreSQL 集群的系统,已发布。
pgAdmin4 5.3,一个 PostgreSQL 的 Web 和原生 GUI 控制中心,已发布。
InfluxDB fdw 1.0.0 已发布 https://github.com/pgspider/influxdb_fdw
griddb_fdw 2.0 已发布。
https://archives.postgresql.org/pgsql-jobs/2021-05/
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。
David Rowley 提交
在构建 Result Cache 路径时添加缺失的 NULL 检查。在 9e215378d 中添加的代码用于在并非所有 JOIN 条件都包含在唯一 JOIN 的参数化中时禁用 Result Cache 路径的构建,但它首先未能检查内部路径的 param_info 是否已设置,然后才检查 param_info 的 ppi_clauses。在此处添加一个 NULL 值检查,如果 param_info 为 NULL,则直接放弃构建路径。lateral_vars 在决定 JOIN 是否唯一时未被考虑,因此在存在 lateral_vars 但 param_info 为 NULL 的情况下,我们并未错过优化。报告人:Coverity,经 Tom Lane 推荐 讨论:https://postgr.es/m/457998.1621779290@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/99c5852e20a0987eca1c38ba0c09329d4076b6a0
修复 setrefs.c 中 Result Cache 节点的代码。在 9eacee2e6 中添加的 Result Cache 未能正确调整 setrefs.c 中的计划引用。这可能导致在 EXPLAIN 期间出现以下错误:ERROR: cannot decompile join alias var in plan tree。修复此问题。错误:17030 报告人:Hans Buschmann 讨论:https://postgr.es/m/17030-5844aecae42fe223@postgresql.org https://git.postgresql.org/pg/commitdiff/cba5c70b956810c61b3778f7041f92fbb8065acb
Tom Lane 提交
文档:将一些 catalogs.sgml 条目移到正确的位置。pg_statistic_ext_data.stxdexpr 被列在错误的 catalog 下,pg_stats_ext.exprs 也是。另外还有一个针对 pg_statistic_ext_data.stxexprs 的错误条目。显然是 commit a4d75c86b 中的合并失败。作者:Guillaume Lelarge 和 Tom Lane 讨论:https://postgr.es/m/CAECtzeUHw+w64eUFVeV_2FJviAw6oZ0wNLkmU843ZH4hAQfiWg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/713a431c781fbfe1a22fae4991836077f0f4c513
修复 inline_function() 中未初始化变量的使用。Commit e717a9a18 引入了一个绕过 get_expr_result_type 调用的代码路径,这不好,因为我们需要它的 rettupdesc 结果来传递给 check_sql_fn_retval。我们之所以没有立即注意到,是因为 check_sql_fn_retval 使用该参数的代码路径在此上下文中很难达到。但这并非不可能,而且无论如何 inline_function 不应该假设 check_sql_fn_retval 不需要该值。为了修复,将 get_expr_result_type 移出 if 块,这反过来需要将 dummy FuncExpr 的构建也移出。根据 Ranier Vilela 的报告。(我对其缺乏任何编译器投诉感到困惑...)讨论:https://postgr.es/m/CAEudQAqBqQpQ3HruWAGU_7WaMJ7tntpk0T8k_dVtNB46DqdBgw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e30e3fdea873e4e9517c490232ea1d3bcef6c643
重新思考 pg_attribute.attcompression 的定义。将 '\0' (InvalidCompressionMethod) 重新定义为“如果需要压缩,则使用 default_toast_compression 的当前设置”。这使得 '\0' 成为适用于任何数据类型的默认选择,大大简化了初始化 tupledescs 等的代码路径。这看起来也更用户友好,因为现在默认的压缩选择不会迁移到表定义中,这意味着更改 default_toast_compression 通常足以改变安装的行为;无需费力地为每个列发出 ALTER SET COMPRESSION 命令。在此过程中,修复了每列压缩功能的几个次要错误和文档问题。采用更健壮的 API 来设置 SetIndexStorageProperties 和 GetAttributeCompression。增加 catversion,因为 attcompression 的典型内容现在将不同。我们可以不这样做,但确保 v14 安装在此问题上达成一致似乎更好。(我们已经为 beta2 强制 initdb 了。)讨论:https://postgr.es/m/626613.1621787110@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e6241d8e030fbd2746b3ea3f44e728224298f35b
减小 genbki.pl 保留的 OID 范围。Commit ab596105b 将 FirstBootstrapObjectId 从 12000 增加到 13000,但我们对此有所顾虑。增加其与 FirstNormalObjectId 之间的差距令人担忧,因为 initdb 在 collation 对象期间消耗的 OID 数量难以预测。我们可以通过放弃这些 OID 必须全局唯一的假设来改善这种情况。为它们在每个 catalog 中唯一就足够了。(任何对此不满意的情况都是错误的,因为一旦 OID 计数器回绕,就无法保证比每个 catalog 的唯一性更多。)有了这个改变,genbki.pl 分配的 OID(从 10000 开始)略小于
这使得我们可以有合理信心将 FirstBootstrapObjectId 恢复到 12000,并且在未来许多年内都足够。目前,我们没有放弃手工分配的 OID(小于 10000)是全局唯一的期望。总有一天这可能会是必要的,但似乎还需要数年时间。这对于 v14 来说已经很晚了,但现在做似乎值得,这样下游软件就不用处理 FirstBootstrapObjectId 更改的后果了。无论如何,我们已经为 beta2 强制 initdb 了,所以再增加一个 catversion 也没什么坏处。讨论:https://postgr.es/m/1665197.1622065382@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/a4390abecf0f5152cff864e82b67e5f6c8489698
文档:改进 libpq 服务文件文档,避免过度指定路径。澄清 libpq.sgml 中关于服务文件位置和语义的描述。避免使用反引号括起来的 pg_config 调用来描述路径;这在 Windows 上不起作用,即使在 Unix 上,也不是所有读者都能立即理解这种惯用法。不要过度指定 include 文件的位置,而是只写在 #include 指令中使用的内容。在某些安装中,这些位置的先前文本不正确,具体取决于“postgresql”在安装路径中的位置。我们引用用户主目录的约定似乎是“~”,因此将一个拼写为“$HOME”的地方改为“~”。install-windows.sgml 遵循平台约定,使用“\”表示文件路径,因此将一个使用“/”的地方改为“\”。作者:Haiying Tang 和 Tom Lane 讨论:https://postgr.es/m/162149020918.26174.7150424047314144297@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/ba356a397de565c014384aa01a945aab7d50928c
Peter Geoghegan 提交
考虑在扫描期间触发 VACUUM 故障安全。commit 1e55e7d1 添加的环绕故障安全机制通过添加专用的故障安全检查来处理单次传递策略(即“表没有索引”的情况)。这弥补了 lazy_vacuum_all_indexes() 中通常的单次传递检查在单次传递策略 VACUUM 期间永远无法到达的事实。这种方法未能考虑到选择提前退出索引 vacuuming 的两次传递 VACUUM。INDEX_CLEANUP off 情况是唯一像这样的情况。通过在堆的第一次扫描期间每 4GB 进行一次故障安全检查来解决此问题,无论 VACUUM 的具体细节如何。这消除了特殊情况,并将使故障安全更可靠地触发。作者:Peter Geoghegan pg@bowt.ie 报告人:Andres Freund andres@anarazel.de 审阅者:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/20210424002921.pb3t7h6frupdqnkp@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/c242baa4a831ac2e7dcaec85feb410aefa3a996e
修复 VACUUM VERBOSE 的 LP_DEAD 页输出。commit 5100010e 中的疏忽。 https://git.postgresql.org/pg/commitdiff/9afdea982420f9672b88e5c17d1ee8eec64105fc
Michaël Paquier 提交
禁止 SSL 重协商。SSL 重协商自 48d23c72 起已被禁用,但这并不能阻止服务器遵守愿意使用重协商的客户端。在过去的几年里,重协商已经出现了一系列安全问题和缺陷(例如最近的 CVE-2021-3449),并且有可能通过尝试重协商的客户端来崩溃后端。此提交采取了额外的步骤,通过在后端禁用重协商,方式与 SSL 压缩 (f9264d15) 或票据 (97d3a0b0) 相同。OpenSSL 1.1.0h 添加了一个名为 SSL_OP_NO_RENEGOTIATION 的选项,可以实现这一点。在旧版本中,有一个名为 SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 的选项,但它是未公开的,并且可以在 TLS 连接打开时创建的 SSL 对象中设置,但我决定不使用它,因为它感觉更难依赖,而且不是官方的。请注意,此选项在 OpenSSL < 1.1.0h 中不可用,因为应用程序对 `*SSL` 对象的内部内容是隐藏的。SSL 重协商涉及 TLSv1.2 及以下协议。根据 Robert Haas 的原始报告,并基于 Andres Freund 的建议的补丁。作者:Michael Paquier 审阅者:Daniel Gustafsson 讨论:https://postgr.es/m/YKZBXx7RhU74FlTE@paquier.xyz 向后移植到:9.6 https://git.postgresql.org/pg/commitdiff/01e6f1a842f406170e5f717305e4a6cf0e84b3ee
修复 VACUUM FULL/CLUSTER 中解压压缩值时的内存泄漏。VACUUM FULL 和 CLUSTER 可用于强制使用 toastable 列的现有压缩方法,如果当前存储的值是用与列定义的raseña方法不匹配的方法压缩的。在重写 toast 值时负责解压和重新压缩的代码留下了解压后的值,导致 TopTransactionContext 中的内存累积。处理大型关系时,这可能导致系统内存不足。元组重写后不需要解压后的值,此提交确保进行必要的清理。由 bbe0a81d 引入的问题。顺便对该区域的注释进行了少量重新排序。报告人:Andres Freund 分析者:Andres Freund 作者:Michael Paquier 审阅者:Dilip Kumar 讨论:https://postgr.es/m/20210521211929.pcehg6f23icwstdb@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/fb0f5f0172edf9f63c8f70ea9c1ec043b61c770e
修复 heapam.c 中的拼写错误。作者:Hou Zhijie 讨论:https://postgr.es/m/OS0PR01MB571612191738540B27A8DE5894249@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/190fa5a00a8f9ecee8eef2c8e26136b772b94e19
文档:修复文档和 postgresql.conf.sample 中一些 GUC 的描述。以下参数的描述(PGC_POSTMASTER 或 PGC_SIGHUP)不准确或不正确:- autovacuum_work_mem(文档,自 9.6 起)- huge_page_size(文档,自 14 起)- max_logical_replication_workers(文档,自 10 起)- max_sync_workers_per_subscription(文档,自 10 起)- min_dynamic_shared_memory(文档,自 14 起)- recovery_init_sync_method(postgresql.conf.sample,自 14 起)- remove_temp_files_after_crash(文档,自 14 起)- restart_after_crash(文档,自 9.6 起)- ssl_min_protocol_version(文档,自 12 起)- ssl_max_protocol_version(文档,自 12 起)此提交调整了所有这些参数的描述,以使其与对其他参数的使用方法更加一致。审阅者:Justin Pryzby 讨论:https://postgr.es/m/YK2ltuLpe+FbRXzA@paquier.xyz 向后移植到:9.6 https://git.postgresql.org/pg/commitdiff/2941138e60fc711bd221b3264807f36cc079dfbb
修复使用 GSSAPI/Kerberos 构建时的 MSVC 脚本。Windows 上 Kerberos 的可交付文件安装的路径与我们的 MSVC 脚本不匹配。首先,我们的脚本中的 include 文件夹命名为“inc/”,但上游 MSI 使用“include/”。其次,由于库的名称不同,64 位环境的构建会失败。此提交调整了 MSVC 脚本以兼容上游的最新安装,并且我已检查过 32 位和 64 位安装的编译都能正常工作。特别感谢 Kondo Yuta 在 hamerkop 中协助调查 GSS 编译的错误配置。报告人:Brian Ye 讨论:https://postgr.es/m/162128202219.27274.12616756784952017465@wrigleys.postgresql.org 向后移植到:9.6 https://git.postgresql.org/pg/commitdiff/025110663448a8c877f4b591495f2e5d187d8936
Amit Kapila 提交
改进并行 vacuum 的文档和错误消息。错误消息、文档和其中一个选项都使用了“parallel degree”来表示 vacuum 命令使用的并行度。我们在其他地方通常使用“parallel workers”,因此为此也相应地更改了并行 vacuum。作者:Bharath Rupireddy 审阅者:Dilip Kumar, Amit Kapila 向后移植到:13 讨论:https://postgr.es/m/CALj2ACWz=PYrrFXVsEKb9J1aiX4raA+UBe02hdRp_zqDkrWUiw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0734b0e983443882ec509ab4501c30ba9b706f5f
文档:更新逻辑解码统计信息。添加 pg_stat_replication_slots 视图以及其他与逻辑解码相关的系统目录的信息。作者:Vignesh C 审阅者:Amit Kapila 讨论:https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/0c6b92d9c6fb74255467573fde54f65139b26603
修复流式传输 multi-insert toast 更改时的内存泄漏。在解码 multi-insert WAL 时,我们无法在获取该 WAL 记录的最后一个 insert 之前清理 toast。现在,如果我们先流式传输更改,然后在获取最后更改之前,toast 块的内存将不会被释放,并且我们期望事务在流式传输后已流式传输所有更改。此限制主要是为了确保流式事务的正确性,并且为了允许这种情况而仅允许这种限制似乎不值得,因为无论如何,一旦这种 insert 完成,我们都会流式传输事务。以前,我们使用两个不同的标志(一个用于 toast 元组,另一个用于投机性 insert)来指示部分更改。现在,我们用一个标志替换了这两个标志,以指示部分更改。报告人:Pavan Deolasee 作者:Dilip Kumar 审阅者:Pavan Deolasee, Amit Kapila 讨论:https://postgr.es/m/CABOikdN-_858zojYN-2tNcHiVTw-nhxPwoQS4quExeweQfG1Ug@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6f4bdf81529fdaf6744875b0be99ecb9bfb3b7e0
Peter Eisentraut 提交
postgresql.conf.sample:使垂直间距一致。 https://git.postgresql.org/pg/commitdiff/8673a37c85fef00dd5b9c04197538142bec10542
将运行时错误检查替换为断言。错误消息检查从解析器返回的结构是否符合预期。这通常是我们使用断言的地方,而不是面向用户的完整错误消息。因此,将其替换为断言(隐藏在 lfirst_node() 中)。审阅者:Tom Lane tgl@sss.pgh.pa.us 讨论:https://postgresql.ac.cn/message-id/flat/452e9df8-ec89-e01b-b64a-8cc6ce830458%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/388e75ad33489b77cfb9a8590a91e9287d8fb960
向 pgxs 添加 NO_INSTALL 选项。应用于 libpq_pipeline 测试 makefile,以便测试文件不会安装到 tmp_install 中。审阅者:Alvaro Herrera alvherre@alvh.no-ip.org 审阅者:Tom Lane tgl@sss.pgh.pa.us 讨论:https://postgresql.ac.cn/message-id/flat/cb9d16a6-760f-cd44-28d6-b091d5fb6ca7%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/6abc8c2596dbfcb24f9b4d954a1465b8015118c3
修复 libpq_pipeline 测试中的 vpath 构建。路径需要设置为指向构建目录,而不是当前目录,因为此时它实际上是源目录。修复 6abc8c2596dbfcb24f9b4d954a1465b8015118c3 https://git.postgresql.org/pg/commitdiff/a717e5c771610cf8607f2423ab3ab6b5d30f44ea
Álvaro Herrera 提交
使 detach-partition-concurrently-3 对时间的敏感度降低。这个最近添加的测试在向等待锁的会话发送取消信号时,对时间的敏感度太高。我们通过在被阻塞的会话中立即执行一个 no-op 查询来修复此问题;这可以避免发送取消信号的会话在取消信号报告之前立即发送另一个查询。想法来源:Noah Misch。有了这个修复,我们有时会发现取消错误报告仅相对于被取消的步骤显示,而不是与发送取消信号的步骤一起显示。为了增加两个步骤一起显示的概率,在取消信号中添加一个 0.1 秒的睡眠。在正常情况下,这似乎足以抑制大多数失败,但我们会看到较慢的 buildfarm 成员对此的反应。报告人:Takamichi Osumi osumi.takamichi@fujitsu.com 讨论:https://postgr.es/m/OSBPR01MB4888C4ABA361C7E81094AC66ED269@OSBPR01MB4888.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/5e0b1aeb2dfed4f1eb7ac5154c1573885a70db41
使 detach-partition-concurrently-4 对时间敏感度降低。与 5e0b1aeb2dfe 相同,针对配套的测试文件。这个文件似乎失败的概率较低(一个月运行两次失败);我很难在没有补丁的情况下重现失败,所以我也无法用它重现失败,这并不能说明什么。我们将不得不等待更多的 buildfarm 结果才能知道是否需要进一步的调整。讨论:https://postgr.es/m/20210524090712.GA3771394@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/eb43bdbf5104c183412aac0fccf8e515e60d9212
Andrew Dunstan 推送
在 MSVC 构建的 pg_config 中报告配置的端口。这是一个长期存在的遗漏,在尝试编写依赖它的代码时发现。向所有活动分支进行回溯。 https://git.postgresql.org/pg/commitdiff/fb424ae85f6b1e32e545f13902d3ba3429be44df
修复语法错误。 https://git.postgresql.org/pg/commitdiff/d69fcb9caef1ac1f38241645d4fb9f7e0ce02a70
Thomas Munro 推送
Fabien COELHO 和 Aleksander Alekseev 交换了补丁,用更适合 64 位时代的东西替换了 rand48 伪随机数生成器。
Greg Nancarrow 和 Pavel Borisov 交换了补丁,以修复并行工作进程的断言失败和核心转储。
Vigneshwaran C 发送了另一个版本的补丁,为 PUBLICATION 添加了模式级别的支持。
Hou Zhijie 和 Amit Langote 交换了补丁,在分区键为常量的情况下跳过分区元组路由。
Dilip Kumar、Tsutomu Yamada 和 Kyotaro HORIGUCHI 交换了补丁,以修复恢复过程中的竞态条件。
Hou Zhijie 发送了另一个版本的补丁,使 INSERT ... SELECT 能够并行化。
Tom Lane 发送了两个版本的补丁,以修复 CALL 和带有仅输出参数的过程之间的不兼容问题。
Justin Pryzby 发送了另一个版本的补丁,使 WAL 压缩方法可插拔,并默认为 lz4。
Andy Fan 发送了一个补丁,当 root->simple_rte_array 为真时,使用 planner_rt_fetch 而不是 rt_fetch。
Ajin Cherian 发送了五个后续版本的补丁,用于跳过逻辑复制的空事务。
Mark Dilger 发送了另一个版本的补丁,将超级用户任务委派给新的安全角色。
Hou Zhijie、Bharath Rupireddy 和 Tomáš Vondra 交换了补丁,以确保 postgres_fdw 的批处理不会使用过多的参数。
Bharath Rupireddy 发送了一个补丁,提供了 TDE 随机数大小作为 initdb 选项,将 TDE 随机数字节添加到 page pd_special 结构,并调整了测试以考虑可配置的 TDE 随机数大小。
Bharath Rupireddy 发送了另一个版本的补丁,以消除“非负数”错误消息中的歧义。
Antonin Houska 发送了一个补丁,以缩小 concurrent UPDATE 重新启动 heap_lock_tuple() 的情况,从而减少不必要的相同调用。
Greg Sabino Mullane 发送了一个补丁,通过避免在 checksum 已设置为预期值时写入来加速 pg_checksums。
Michaël Paquier 发送了一个补丁,旨在修复一个在 2PC 使用时,主备节点提升时快照不正确的 bug。
Bharath Rupireddy 发送了两个后续版本的补丁,以检查重复选项并在 CREATE COLLATION 中找到它们时报错。
Andrey V. Lepikhov 发送了一个补丁,教优化器考虑将非分区表与分区表的每个分区进行分区连接。
Andrey V. Lepikhov 发送了另一个版本的补丁,通过新的等价类来消除不必要的自连接。
Peter Eisentraut 发送了一个补丁,以修复 hba 文件解析中的 RADIUS 错误报告。
Vigneshwaran C 和 Bharath Rupireddy 交换了补丁,以改进 publication 错误消息。
Tom Lane 发送了另一个版本的补丁,用固定范围检查替换 pg_depend PIN 条目。
Kyotaro HORIGUCHI 发送了两个版本的补丁,将令人困惑的“括号”用法改为更清晰的措辞,并为(多)范围类型的尾随垃圾添加了测试用例。
Bharath Rupireddy 和 Hou Zhijie 交换了补丁,使 CREATE TABLE AS 中的并行插入成为可能。
Dilip Kumar 发送了一个补丁,以修复解码带有 toast 的投机性插入时的内存泄漏。
Peter Geoghegan 发送了一个补丁,用于通用化 VACUUM 的 INDEX_CLEANUP 选项,使用户可以禁用 commit 5100010e 添加的索引 vacuum 绕过优化,以及未来可能添加的任何类似优化。
Paul Guo 发送了另一个版本的补丁,用于仅 fsync 受影响的文件/目录,并使用 copy_file_range() 进行文件复制(在 pg_rewind 中)。
Takamichi Osumi 发送了另一个版本的补丁,用于记录长时间运行查询的计划。
Daniel Gustafsson 发送了另一个版本的补丁,以支持 NSS 作为 libpq TLS 后端。
Etsuturo Fujita 发送了一个补丁,用于修复 PostgreSQL FDW 中异步追加的 rescans。
Vigneshwaran C 发送了一个补丁,添加了别名类型 regpublication 和 regsubscription。
Fabien COELHO 发送了一个补丁,以减少 psql echo 代码中的一些重复。
Laurenz Albe 发送了另一个版本的补丁,以扩展 PostgreSQL 扩展编码和后台工作进程开发的文档,至少简要提及关键主题,如分配、中断处理、退出回调、事务回调、PG_TRY()/PG_CATCH()、资源所有者、事务和快照状态等,并提供更多学习资料的链接。
Tom Lane 发送了一个补丁,以减少待处理的 inval 消息的内存消耗。
Andreas Karlsson 发送了一个补丁,以缩小 GISTSTATE。
Yura Sokolov 发送了一个补丁,以清理页面中的空白区域。
Tomáš Vondra 发送了一个补丁,用于回滚部分 COPY FREEZE 改进,特别是调整 heap_multi_insert,并删除 39b66a91bd 的大部分内容(除了 heap_xlog_multi_insert 位)。
Thomas Munro 发送了两个版本的补丁,以支持 macOS 上的直接 I/O。