PostgreSQL 每周新闻 - 2021 年 5 月 30 日

发布于 2021-06-10 由 PWN
PWN

PostgreSQL 每周新闻 - 2021 年 5 月 30 日

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 已发布

PostgreSQL 产品新闻

五月份 PostgreSQL 工作

https://archives.postgresql.org/pgsql-jobs/2021-05/

PostgreSQL 新闻

Planet PostgreSQL:https://planet.postgresql.org/

本周 PostgreSQL 每周新闻由 David Fetter 带给您

请在太平洋标准时间下午 3:00 前的周日将新闻和公告提交至 david@fetter.org。

已应用补丁

David Rowley 推送

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 推送

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 推送了

Peter Eisentraut 推送了

Álvaro Herrera 推送了

Andrew Dunstan 推送了

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。