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 带给您
请在太平洋标准时间下午 3:00 前的周日将新闻和公告提交至 david@fetter.org。
David Rowley 推送
在构建结果缓存路径时添加缺失的 NULL 检查。在 9e215378d 中添加的代码,用于在并非所有连接条件都是唯一连接参数化的一部分时禁用构建结果缓存路径,在检查参数信息中的 ppi_clauses 之前,未能首先检查内部路径的 param_info 是否已设置。在此处添加对 NULL 值的检查,如果 param_info 为 NULL,则放弃尝试构建路径。在决定连接是否唯一时不考虑 lateral_vars,因此当存在 lateral_vars 且没有 param_info 时,我们不会错过执行优化的机会。报告者:Coverity,通过 Tom Lane 讨论:https://postgr.es/m/457998.1621779290@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/99c5852e20a0987eca1c38ba0c09329d4076b6a0
修复结果缓存节点的 setrefs.c 代码。在 9eacee2e6 中添加的结果缓存,忽略了正确调整 setrefs.c 中的计划引用。这可能会导致 EXPLAIN 期间出现以下错误:错误:无法在计划树中反编译连接别名变量。修复此问题。错误: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 和 pg_stats_ext.exprs 被列在错误的目录中。此外,pg_statistic_ext_data.stxexprs 存在一个虚假条目。显然是提交 a4d75c86b 中的合并失败。Guillaume Lelarge 和 Tom Lane 讨论:https://postgr.es/m/CAECtzeUHw+w64eUFVeV_2FJviAw6oZ0wNLkmU843ZH4hAQfiWg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/713a431c781fbfe1a22fae4991836077f0f4c513
修复 inline_function() 中使用未初始化变量的问题。提交 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 块,这反过来需要将虚拟 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 命令。在此过程中,修复了每个列压缩功能的一些小错误和文档问题。为 SetIndexStorageProperties 和 GetAttributeCompression 采用更强大的 API。增加 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 范围。提交 ab596105b 将 FirstBootstrapObjectId 从 12000 增加到 13000,但我们对此有一些反对意见。减少此处和 FirstNormalObjectId 之间的差距令人担忧,因为 initdb 期间为排序规则对象消耗的 OID 数量很难预测。我们可以通过放弃这些 OID 必须是全局唯一的假设来改善这种情况。它们对每个目录是唯一的应该就足够了。(任何对这种情况不满意的代码无论如何都会被破坏,因为一旦 OID 计数器回绕,就无法保证每个目录以上的唯一性。)通过此更改,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 指令中使用的部分。这些地方之前的文本对于某些安装是不正确的,具体取决于“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 安全保护。提交 1e55e7d1 添加的环绕安全保护机制通过添加专用的安全保护检查来处理单遍策略情况(即“表没有索引”的情况)。这弥补了 lazy_vacuum_all_indexes() 中的通常单遍检查在单遍策略 VACUUM 期间永远无法到达的事实。这种方法未能解释提前选择退出索引清理的两遍 VACUUM。INDEX_CLEANUP 关闭的情况是唯一像那样工作的情况。通过在堆的第一次扫描期间每 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 项目页输出。提交 5100010e 中的疏忽。https://git.postgresql.org/pg/commitdiff/9afdea982420f9672b88e5c17d1ee8eec64105fc
Michaël Paquier 推送
禁止 SSL 重新协商。从 48d23c72 开始,SSL 重新协商已被禁用,但这并不能阻止服务器响应客户端使用重新协商的意愿。在过去的几年里,重新协商出现了一系列安全问题和漏洞(如最近的 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 来强制使用可 toasting 列的现有压缩方法。在重写时负责解压缩和重新压缩 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 中的拼写错误。作者:侯志杰 讨论: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 脚本的问题。上游 Kerberos 在 Windows 上的交付物安装路径与我们的 MSVC 脚本不匹配。首先,在我们的脚本中,包含文件夹被命名为 "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
修复多重插入 toast 更改流式传输期间的断言。在解码多重插入 WAL 时,我们无法清除 toast,直到我们获得该 WAL 记录的最后一次插入。现在,如果我们在获得最后一次更改之前流式传输更改,则不会释放 toast 块的内存,并且我们希望事务在流式传输后流式传输所有更改。此限制主要是为了确保流式传输事务的正确性,并且似乎不值得为了允许这种情况而取消此限制,因为无论如何我们都会在此类插入完成后流式传输事务。之前我们使用两个不同的标志(一个用于 toast 元组,另一个用于投机插入)来表示部分更改。现在,我们用一个标志替换了这两个标志,以表示部分更改。报告者: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 对时序不那么敏感。这个最近添加的测试显示在向等待锁的会话发送取消时对时序过于敏感。我们通过在取消后立即在阻塞会话中运行一个空操作查询来修复此问题;这避免了发送取消的会话在取消被报告之前立即发送另一个查询。Noah Misch 的想法。通过该修复,我们有时会看到取消错误报告仅显示与被取消的步骤相关,而不是与发送取消的步骤一起显示。为了增加两个步骤一起显示的可能性,在取消操作中添加 0.1 秒的睡眠。在正常情况下,这似乎足以消除大多数故障,但我们会看到较慢的构建服务器成员对此有何看法。报告者: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 相同,用于配套测试文件。这个的概率似乎较低(一个月运行中只有两次失败);如果没有补丁,我几乎无法重现失败,因此我无法使用它重现失败的事实并不能说明任何问题。我们将不得不等待进一步的构建服务器结果,看看是否需要进行任何进一步的调整。讨论: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 交换了补丁,以将 rand48 伪随机数生成器替换为更适合 64 位时代的生成器。
Greg Nancarrow 和 Pavel Borisov 交换了补丁,以修复并行工作进程失败的断言和核心转储。
Vigneshwaran C 发送了另一个修订版本的补丁,以添加对 PUBLICATION 的模式级别支持。
侯志杰和 Amit Langote 交换了补丁,以在分区键为常量的情况下跳过分区元组路由。
Dilip Kumar、山田勉和堀口恭太郎交换了补丁,以修复恢复过程中的竞争条件。
侯志杰提交了另一个版本的补丁,使其可以并行化 INSERT ... SELECT 操作。
Tom Lane 提交了两个版本的补丁,以修复 CALL 和带有仅输出参数的过程之间的不协调。
Justin Pryzby 提交了另一个版本的补丁,使 WAL 压缩方法可插拔,并默认使用 lz4。
Andy Fan 提交了一个补丁,在 root->simple_rte_array 时使用 planner_rt_fetch 而不是 rt_fetch。
Ajin Cherian 提交了五个版本的补丁,以跳过逻辑复制的空事务。
Mark Dilger 提交了另一个版本的补丁,将超级用户任务委托给新的安全角色。
侯志杰、Bharath Rupireddy 和 Tomáš Vondra 交换了补丁,以确保 postgres_fdw 批处理不会使用过多的参数。
Bharath Rupireddy 提交了一个补丁,将 TDE 随机数大小作为 initdb 选项提供,将 TDE 随机数字节添加到页面 pd_special 结构中,并调整测试以考虑可配置的 TDE 随机数大小。
Bharath Rupireddy 提交了另一个版本的补丁,以消除使用“非负”的错误消息的歧义。
Antonin Houska 提交了一个补丁,缩小了并发 UPDATE 重启 heap_lock_tuple() 的情况,从而减少了对它的不必要调用。
Greg Sabino Mullane 提交了一个补丁,以加速 pg_checksums 在校验和已经设置的情况下,通过避免在它已经设置为预期值时写入相同的值。
Michaël Paquier 提交了一个补丁,旨在修复在使用 2PC 时提升热备节点时出现的快照不正确的错误。
Bharath Rupireddy 又提交了两个版本的补丁,以检查重复的选项,如果它们在 CREATE COLLATION 中找到则报错。
Andrey V. Lepikhov 提交了一个补丁,教优化器考虑非分区表与分区表的每个分区进行分区式连接。
Andrey V. Lepikhov 提交了另一个版本的补丁,通过新的等价类删除不必要的自连接。
Peter Eisentraut 提交了一个补丁,以修复 hba 文件解析中的 RADIUS 错误报告。
Vigneshwaran C 和 Bharath Rupireddy 交换了补丁,以改进发布错误消息。
Tom Lane 提交了另一个版本的补丁,用固定范围检查替换 pg_depend PIN 条目。
堀口恭太郎提交了两个版本的补丁,将令人困惑的“括号”用法更改为更清晰的措辞,并为(多)范围类型的尾随垃圾添加了测试用例。
Bharath Rupireddy 和侯志杰交换了补丁,使得在 CREATE TABLE AS 中可以使用并行插入。
Dilip Kumar 提交了一个补丁,修复了使用 TOAST 解码推测插入时的内存泄漏。
Peter Geoghegan 提交了一个补丁,以泛化 VACUUM 的 INDEX_CLEANUP 选项,使用户可以禁用由提交 5100010e 添加的索引清理绕过优化,以及将来可能添加的任何类似优化。
Paul Guo 提交了另一个版本的补丁,以仅 fsync 受影响的文件/目录,并在 pg_rewind 中使用 copy_file_range() 进行文件复制。
大隅孝道提交了另一个版本的补丁,以记录长时间运行的查询的计划。
Daniel Gustafsson 提交了另一个版本的补丁,以支持 NSS 作为 libpq TLS 后端。
Etsuro Fujita 提交了一个补丁,以修复 PostgreSQL FDW 中异步追加的重新扫描。
Vigneshwaran C 提交了一个补丁,以添加别名类型 regpublication 和 regsubscription。
Fabien COELHO 提交了一个补丁,以减少 psql 的 echo 代码中的一些重复。
Laurenz Albe 提交了另一个版本的补丁,以扩展关于 PostgreSQL 扩展编码和后台工作程序开发的文档,以便至少简要提及诸如分配、中断处理、退出回调、事务回调、PG_TRY()/PG_CATCH()、资源所有者、事务和快照状态等关键主题,并提供一些指向何处了解更多信息的指针。
Tom Lane 提交了一个补丁,以减少待处理的无效消息的内存消耗。
Andreas Karlsson 提交了一个补丁,以缩小 GISTSTATE。
Yura Sokolov 提交了一个补丁,以清除页面中的空白空间。
Tomáš Vondra 提交了一个补丁,以恢复 COPY FREEZE 部分改进,即调整 heap_multi_insert,并删除 39b66a91bd 的大部分内容(除了 heap_xlog_multi_insert 位)。
Thomas Munro 提交了两个版本的补丁,以支持 macOS 上的直接 I/O。