pg-wrapper 1.0.0 发布,这是 PHP 的 pgsql 扩展的一个包装器。 发布。
JDBC 42.2.23 发布 https://jdbc.postgresql.ac.cn/documentation/changelog.html#version_42.2.23
Ora2Pg 22.1 发布,这是一个将 Oracle 数据库迁移到 PostgreSQL 的工具。 https://github.com/darold/ora2pg/blob/master/changelog
credcheck 0.1.1 发布,这是一个用于纯文本密码的密码检查机制。 发布
pg_builder 1.0.0 发布,这是 PostgreSQL 的一个 PHP 查询构建器。 发布。
PG-Strom 3.0 发布,这是一个使用 GPU 和相关硬件加速 OLAP 查询的 PostgreSQL 扩展。 发布。
Datasentinel Version 2021.05 发布,这是一个用于监控和报告 PostgreSQL 等信息的应用程序。 发布
https://archives.postgresql.org/pgsql-jobs/2021-07/
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。
Amit Kapila 提交
文档:哈希索引。新增了关于哈希索引的章节,旨在帮助用户理解其工作原理和使用场景。回溯兼容至 10 版本,在此版本中我们已将哈希索引设为持久化。作者:Simon Riggs 审阅者:Justin Pryzby, Amit Kapila 讨论:https://postgr.es/m/CANbhV-HRjNPYgHo--P1ewBrFJ-GpZPb9_25P7=Wgu7s7hy_sLQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e360aa0530b6d1f9e43f2aca760203de0421ef5e
重构 parse_subscription_options 函数。不再使用 parse_subscription_options 函数签名中的多个参数,而是使用 SubOpts 结构体来封装所有订阅选项及其值。这对于未来需要添加其他订阅选项的工作很有用。此外,使用位图来传递支持的选项并检索指定的选项,类似于提交 a3dc926009 中的做法。作者:Bharath Rupireddy 审阅者:Peter Smith, Amit Kapila, Alvaro Herrera 讨论:https://postgr.es/m/CALj2ACXtoQczfNsDQWobypVvHbX2DtgEHn8DawS0eGFwuo72kw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8aafb02616753f5c6c90bbc567636b73c0cbb9d4
Peter Eisentraut 提交
文档:修复引用标记。 https://git.postgresql.org/pg/commitdiff/903d9aa7801e3198ca24e90be805362ad11b6ec3
改进关于 relkind 不匹配的错误消息。关于不支持或不适合命令的 relkind 的大多数错误消息的模式是“relation "%s" is not a table, foreign table, or materialized view”(关系“%s”不是表、外部表或物化视图)。这种风格可能变得冗长且难以维护。而且,它也不是很有帮助:如果我尝试对 TOAST 表创建注释,这是不支持的,那么可以创建物化视图注释的信息是毫无用处的。相反,将主要的错误消息写得更短,并更直接地说明尝试的操作是不可能的。然后在详细消息中解释该操作不支持该对象所属的 relkind。为简化这一点,添加了一个新的函数 errdetail_relkind_not_supported() 来完成此任务。顺便,在适当的地方使用 RELKIND_HAS_STORAGE(),而不是单独列出 relkinds。审阅者:Michael Paquier michael@paquier.xyz 审阅者:Alvaro Herrera alvherre@alvh.no-ip.org 讨论:https://postgresql.ac.cn/message-id/flat/dc35a398-37d0-75ce-07ea-1dd71d98f8ec@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/2ed532ee8c474e9767e76e1f3251cc3a0224358c
Dean Rasheed 已推送
防止并行数值聚合中的数值溢出。以前,各种数值聚合函数通过让每个工作进程将部分聚合值转换为 Numeric 并使用 numeric_send() 作为序列化其状态的一部分来支持并行聚合。这是个问题,因为 Numeric 的范围比 NumericVar 小,因此在非并行模式下会成功的某些情况下可能会溢出(小数点两侧)。通过序列化 NumericVars 来修复此问题,以避免溢出风险并确保并行和非并行模式的工作方式相同。一个附带的好处是,这提高了序列化/反序列化代码的效率,这对于大量并行工作进程来说可能对性能产生显著影响。不进行回溯补丁,因为更改聚合序列化状态的二进制格式存在风险,并且之前没有此类抱怨,而且实际发生溢出的可能性很低。补丁由我提交。感谢 David Rowley 的审查和性能测试,以及 Rainier Vilela 的额外建议。讨论:https://postgr.es/m/CAEZATCUmeFWCrq2dNzZpRj5+6LfN85jYiDoqm+ucSXhb9U2TbA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f025f2390e13d7da69da595086fb982bbaf7f329
修复 numeric_mul() 由于小数点后位数过多导致的溢出。此修复通过对结果进行四舍五入,解决了使用 numeric `*` 运算符时,如果结果的小数点后位数超过 16383 位导致的溢出错误。溢出错误只应在结果小数点前位数过多时发生。讨论:https://postgr.es/m/CAEZATCUmeFWCrq2dNzZpRj5+6LfN85jYiDoqm+ucSXhb9U2TbA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e7fc488ad67caaad33f6d5177081884495cb81cb
Tom Lane 提交
重新考虑 detach-partition-concurrently-[34] 中的阻塞注解。在 741d7f104 中,我曾试图让取消步骤的报告在 pg_cancel_backend() 步骤之后输出,因为这之前是最常见的排序方式。然而,这并不能确保取消的步骤不会更晚报告,如最近在 buildfarm 成员 idiacanthus 上发生的失败所示。与其通过额外的注解使事情更加复杂,不如强制取消的效果首先报告。这看起来也并非不自然。回溯兼容至 v14,即这些测试用例出现时。报告:https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=idiacanthus&dt=2021-07-02%2001%3A40%3A04 https://git.postgresql.org/pg/commitdiff/c04c767059b8460b99f6aa4aae5450ab3ee257a3
减少 LookupOpclassInfo() 中缓存清除测试的开销。提交 03ffc4d6d 添加了在 CLOBBER_CACHE_ALWAYS 启用时绕过 LookupOpclassInfo 中所有缓存行为的逻辑。我似乎没有仔细考虑这会带来什么成本,但最近的调查显示成本非常高:它大约使缓存清除测试运行时间翻倍。当尝试测试 opclass 缓存加载逻辑本身时,此行为似乎是有价值的,但对于其他目的,成本过高。因此,让我们回溯到仅当 debug_invalidate_system_caches_always 至少为 3 时才执行此操作;或者在旧分支中,当定义了 CLOBBER_CACHE_RECURSIVELY 时。同时,清理 LookupOpclassInfo 中的一些其他小问题。重新排列代码,以便在我们遭受 OOM 尝试分配新条目空间的情况下(这似乎是我的疏忽),不会留下损坏的缓存条目(导致后续核心转储)。(这似乎是我的疏忽,源于 03ffc4d6d。)此外,在 >= v13 中,停止分配一个多余的数组条目。这显然是 851b14b0c 中粗糙回滚的遗留物。回溯兼容至所有支持的分支,主要目的是减少缓存清除 buildfarm 动物的运行时间。讨论:https://postgr.es/m/1370856.1625428625@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9753324b7d9eba0aaf7e12942f52c240bfc7da7c
文档:添加关于带有小数分钟 UTC 偏移量的时间戳的信息。我们的代码长期以来一直支持带有小数分钟 UTC 偏移量的时间戳,但主文档中对此可能性没有提及,只有在附录 B 中有非常间接的引用。改进这一点。讨论:https://postgr.es/m/162543102827.697.5755498651217979813@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/ab2e19987ff66f83dfb99b5c541d9e05e8b0ede3
避免在 postgres_fdw 的 conversion_error_callback 中执行目录查找。与 50371df26 一样,这是一个坏主意,因为回调函数无法真正知道正在抛出哪个错误,因此无法确定尝试目录访问是否安全。我们不必将这些访问推送到主线代码中(通常是浪费周期),而是可以查看查询的 rangetable。此更改意味着我们将打印查询别名(如果使用了的话),而不是表的实际名称或列的实际名称。但这似乎不是一件坏事:例如,在自连接的情况下,它肯定是一个更有用的定义。无论如何,应用程序似乎不太可能依赖于这个细节,所以更改它是安全的。补丁由我提交。最初由 Andres Freund 投诉;Bharath Rupireddy 注意到了与 conversion_error_callback 的联系。讨论:https://postgr.es/m/20210106020229.ne5xnuu6wlondjpe@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/c7b7311f6177b90fe5033b8ed2c10dfcbb863eb6
降低计划深度嵌套视图的成本。Joel Jacobson 报告说,平凡(可展平)视图的深度嵌套会导致 N 深度嵌套的计划时间以 O(N^3) 的速度增长。事实证明,其中很大一部分成本来自复制每个视图的 RTE_SUBQUERY RTE 的“子查询”子树。但一旦我们成功地展平了子查询,我们就不再需要它了,因为规划器不会对该 RTE 做任何其他有趣的事情。我们已经在 setrefs.c 中(参见 add_rte_to_flat_rtable)删除了子查询指针,但在此之前它也是无用的包袱。一旦 pull_up_simple_subquery 完成了 RTE 的工作,就清除指针可以将成本从 O(N^3) 降低到 O(N^2);这仍然不理想,但要好得多。进一步的改进将需要重新考虑 RTE 数据结构,这将在另一个线程中进行考虑。补丁由我提交;感谢 Dean Rasheed 的审查。讨论:https://postgr.es/m/797aff54-b49b-4914-9ff9-aa42564a4d7d@www.fastmail.com https://git.postgresql.org/pg/commitdiff/64919aaab45076445051245c9bcd48dd84abebe7
允许 CustomScan 提供者声明它们是否支持投影。以前,所有 CustomScan 提供者都必须支持投影,但这在某些情况下可能不方便。添加一个标志位来说明是否支持。发布说明中的重要项:这不向后兼容,因为默认值现在假定 CustomScan 提供者不能投影,而不是假定它们可以。这是一个可容错的更改,但由于添加了不必要的 Result 节点,可能会导致可见的性能下降。Sven Klemm 审阅,Aleksander Alekseev 审阅;我进行了一些小的调整。讨论:https://postgr.es/m/CAMCrgp1kyakOz6c8aKhNDJXjhQ1dEjEnp+6KNT3KxPrjNtsrDg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/955b3e0f9269639fb916cee3dea37aee50b82df0
修复 postgres_fdw 中可证明为空的远程 UPDATE/DELETE 时的崩溃。在 86dc90056 中,我编写了 find_modifytable_subplan,假设如果 ModifyTable 的直接子项是 Result,则它必须是一个投影 Result 并且带有子计划。然而,如果 UPDATE 或 DELETE 有一个可证明为恒定的 WHERE 子句为 false,情况并非如此:我们将生成一个带有无子计划的虚拟子计划。添加缺失的空检查,以免在这种情况下崩溃。根据 Alexander Pyhalov 的报告。讨论:https://postgr.es/m/b9a6f53549456b2f3e2fd150dcd79d72@postgrespro.ru https://git.postgresql.org/pg/commitdiff/b9734c13f168ef0d487aa122e486ca9b6dd6aa59
拒绝 WITH 查询重写为仅 NOTIFY 的情况。由于执行器无法处理作为计划树节点的实用语句,因此我们无法支持重写规则将 NOTIFY 插入到较大查询的 WITH 子句中出现的 INSERT/UPDATE/DELETE 命令中的情况。(可以想象出绕过的方法,但这将是新功能而不是错误修复,到目前为止还没有需求。)RewriteQuery 检查了这一点,但它错过了 DML 命令重写为仅 NOTIFY 的情况。这将在后续的计划阶段导致崩溃。添加了遗漏的检查,并改进了该区域的测试级别。根据 Yaoguang Chen 的 bug #17094。自 WITH 引入以来一直存在错误,因此回溯兼容至所有支持的分支。讨论:https://postgr.es/m/17094-bf15dff55eaf2e28@postgresql.org https://git.postgresql.org/pg/commitdiff/a9da1934e971b38ab360ce80a352fbfc4d2d986b
更新 configure 中 libldap 的探测,以兼容 OpenLDAP 2.5。独立的 libldap_r 已被移除,libldap 本身现在总是线程安全的。不幸的是,似乎没有简单的方法通过检查来判断 libldap 是否线程安全,因此我们必须相信如果不存在 libldap_r,libldap 就是线程安全的。这应该没问题,因为 libldap_r 在至少 20 年前就是安装的标准部分。报告和补丁由 Adrian Ho 提交。回溯兼容至所有支持的分支,因为人们可能会尝试使用更新的 OpenLDAP 来构建任何版本。讨论:https://postgr.es/m/17083-a19190d9591946a7@postgresql.org https://git.postgresql.org/pg/commitdiff/d0a02bdb8c2576b5aa607f127320e444080bd579
避免创建标记为 LATERAL 的 RESULT RTE。提交 7266d0997 添加了将简单常量函数结果拉入的代码,将 RTE_FUNCTION RTE 转换为虚拟 RTE_RESULT RTE,因为它不再需要扫描。但我忘了在 RTE 具有 LATERAL 标志时清除它。如果函数归结为常量,它肯定不包含横向引用,所以这种简化在逻辑上是 OK 的。这是必需的,因为其他各种地方会断言 RESULT RTE 不是 LATERAL。根据 Yaoguang Chen 的 bug #17097。回溯兼容至 v13,错误代码在此版本中引入。讨论:https://postgr.es/m/17097-3372ef9f798fc94f@postgresql.org https://git.postgresql.org/pg/commitdiff/d23ac62afa646b7073a7f0db0a137308459a263b
修复 AIX 构建。在提交 d0a02bdb8 中,我曾认为统一探测 ldap_bind 会使意图更清晰。然而,这在 AIX 上似乎不起作用,原因不明(也许在那里它是一个宏?)。恢复到以前的行为,探测 ldap_simple_bind 来处理线程安全的情况,否则探测 ldap_bind。根据 buildfarm 成员 hoverfly 的报告。讨论:https://postgr.es/m/17083-a19190d9591946a7@postgresql.org https://git.postgresql.org/pg/commitdiff/31e8cfac5845fa57e1805f4ff81e00ab78dff025
修复 AIX 构建,第二次。我错误地诊断了 hoverfly 不满意的原因。仔细查看,它似乎在链接 libldap 之前需要 libssl 存在;所以问题在于我清空 LIBS 然后进行检查的想法。恢复到与原始代码基本相同,除了当 libldap_r 不存在时不是失败,而是使用 libldap。根据 buildfarm 成员 hoverfly 的报告。讨论:https://postgr.es/m/17083-a19190d9591946a7@postgresql.org https://git.postgresql.org/pg/commitdiff/53c38a086a8001d63401671755638bc95c7fa1c7
修复 ldap_initialize 的损坏测试。唉……我原以为 AC_CHECK_LIB 会做它没做的事,即更新 LIBS。这导致找不到 ldap_initialize。通过移动 ldap_initialize 的探测来修复。在某种意义上,这更正确,因为(至少目前)我们关心 ldap_initialize 是否存在于 libldap 而不是 libldap_r 中。根据 buildfarm 成员 elver 的报告和本地测试。讨论:https://postgr.es/m/17083-a19190d9591946a7@postgresql.org https://git.postgresql.org/pg/commitdiff/9f6be2e79f88c65cef7cfeb0580e8b2ba74974f6
在 ALTER EXTENSION ADD/DROP 时锁定扩展。虽然我们小心地锁定了要添加或删除的对象,但我们未能获得对扩展本身的任何锁定。这允许 ALTER 与 DROP EXTENSION 并行进行,这由于几个原因而有问题。如果两个命令都成功,我们就会留下一个悬空的 pg_depend 链接,这将在稍后导致问题。此外,如果 ALTER 因某种原因失败,它可能会尝试打印扩展的名称,这可能导致崩溃或(在旧分支中)出现抱怨扩展“(null)”的愚蠢错误消息。根据 Alexander Lakhin 的 bug #17098。回溯兼容至所有支持的分支。讨论:https://postgr.es/m/17098-b960f3616c861f83@postgresql.org https://git.postgresql.org/pg/commitdiff/626731db26ae2617e41536678440c3817128a006
Michaël Paquier 提交
在备份结束时使用 WaitLatch() 而不是 pg_usleep()。这涉及到 pg_stop_backup() 和 BASE_BACKUP,在等待 WAL 段归档以供备份使用时。这稍微简化了对此代码路径中使用的等待事件的处理。作者:Bharath Rupireddy 审阅者:Michael Paquier, Stephen Frost 讨论:https://postgr.es/m/CALj2ACU4AdPCq6NLfcA-ZGwX7pPCK5FgEj-CAU0xCKzkASSy_A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2aca19f2989aa938ece7306678f5494a984ece3f
使用通用的机制接口重构 SASL 代码。自 SCRAM 存在于核心代码以来,SCRAM 和 SASL 的代码就紧密耦合在一起,使得添加新的 SASL 机制变得困难,但它们本质上是不同的设施,SCRAM 是 SASL 的一个选项。这重构了与两者相关的代码,以便后端和前端使用一组 SASL 机制的回调函数,并在其中记录任何添加新 SASL 机制的人所期望的内容。两个层之间的划分很清晰,使用两组回调函数(前端和后端)来标记这两个设施之间的边界。回调函数的形状现在直接受到 SCRAM 使用的例程的启发,因此代码更改非常直接,SASL 代码被移到了自己的文件集中。这些文件可能会根据未来如何以及是否添加新的 SASL 机制而发生变化。作者:Jacob Champion 审阅者:Michael Paquier 讨论:https://postgr.es/m/3d2a6f5d50e741117d6baf83eb67ebf1a8a35a11.camel@vmware.com https://git.postgresql.org/pg/commitdiff/9fd85570d179f10f93344d722005f7086b3c31ca
在 xlogreader.c 中添加遗漏的 LSN_FORMAT_ARGS()。这些本应是 4035cd5 的一部分,该提交引入了 LZ4 支持用于 wal_compression。 https://git.postgresql.org/pg/commitdiff/0f80b47d24b470babd61f2d9927d1956075f771d
在 SASL 交换中添加更多健全性检查。添加了以下检查,以使 SASL 基础设施在实现新机制时更能意识到缺陷:- 检测到如果后端中的交换失败,机制没有生成任何输出,并在有消息等待发送时失败。- 处理前端中的零长度消息。后端已经处理了这种情况,SCRAM 会抱怨发送空消息,因为该机制不允许这样做,但其他机制可能想要此功能(SASL 规范允许)。- 确保机制在前端的交换过程中生成消息。SCRAM 在实现时已经遵守了所有这些要求,并且最近在 9fd8557 中对 SASL 进行的重构有助于以更清晰的方式记录这一点。分析者:Jacob Champion 作者:Michael Paquier 审阅者:Jacob Champion 讨论:https://postgr.es/m/3d2a6f5d50e741117d6baf83eb67ebf1a8a35a11.camel@vmware.com https://git.postgresql.org/pg/commitdiff/44bd0126c70b5b90e8e2d604833a6476abbbffe6
David Rowley 提交
减少构建分区边界时的 palloc 调用次数。在 LIST、RANGE 和 HASH 分区的每个 `create_*_bound()` 函数中,都有大量的 palloc 调用,可以减少到少得多的次数。在这些函数中的每一个中,都构建了一个数组,以便在制作 PartitionBoundInfo 之前对其进行 qsort。对于 LIST 和 HASH 分区,会分配一个指针数组,然后在此数组中为每个元素分配内存。由于每个维度的项目数量是预先已知的,因此我们可以为此分配一个单独的内存块。类似地,对于所有分区策略,我们都可以将分配次数减少到构建 ->datums 字段。这是一个 Datum 指针数组,但每个元素指向的 Datum 不需要单独分配。一个大块就足够了。对于 RANGE 分区,PartitionBoundInfo->kind 字段可以得到相同的处理。我们可以将相同的优化应用于 partition_bounds_copy()。这样做可能会在分区修剪或对分区表进行 DML 时搜索正确分区的缓存性能方面产生微小影响。然而,这可能很小,而且这主要是为了减少 palloc 开销。作者:Nitin Jadhav, Justin Pryzby, David Rowley 审阅者:Justin Pryzby, Zhihong Yu 讨论:https://postgr.es/m/flat/CAMm1aWYFTqEio3bURzZh47jveiHRwgQTiSDvBORczNEz2duZ1Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/53d86957e980efa06f15232b8cff430d4cc6dd64
修复注释中的拼写错误。作者:James Coleman 讨论:https://postgr.es/m/CAAaqYe8f8ENA0i1PdBtUNWDd2sxHSMgscNYbjhaXMuAdfBrZcg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9ee91cc583802c6507fbc31c348a79e63a10f956
使用哈希表加速 NOT IN(values)。与 50e17ad28(它允许对包含常量集的 IN 子句使用哈希表)类似,我们在这里为 NOT IN 子句添加了相同的功能。NOT IN 的计算方式与:WHERE a <> v1 AND a <> v2 AND a <> v3 相同。显然,如果我们使用哈希表,我们必须与该哈希表完全等效,并考虑到条件的任何一侧都可能包含 NULL,从而返回相同的结果。这需要一些特殊的处理才能与哈希表版本一起工作。在处理 NOT IN 时,ScalarArrayOpExpr 的运算符将是 <> 运算符。为了能够构建和查找哈希表,我们必须使用 <> 的否定运算符。规划器会检查它是否存在且可哈希,并设置 ScalarArrayOpExpr 中的相关字段以指示执行器使用哈希。作者:David Rowley, James Coleman 审阅者:James Coleman, Zhihong Yu 讨论:https://postgr.es/m/CAApHDvoF1mum_FRk6D621edcB6KSHBi2+GAgWmioj5AhOu2vwQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/29f45e299e7ffa1df0db44b8452228625479487f
修复 pg_size_pretty(bigint) 中不正确的返回值。由于 pg_size_pretty(bigint) 的实现方式,当给定负字节数时,返回值可能不等于给定等效正字节数时的返回值。这是由于两个独立的问题:1. 该函数使用位移来将字节数转换为更大的单位。位移执行的舍入与除法不同。例如,-3 >> 1 = -2,但 -3 / 2 = -1。这两种操作仅对正数等效。2. half_rounded() 宏向正无穷大舍入。这意味着负数向零舍入,正数远离零舍入。这里我们通过除法而不是位移来修复 #1。我们通过调整 half_rounded 宏使其始终远离零舍入来修复 #2。此外,调整 pg_size_pretty(numeric) 函数,使其更明确地使用除法而不是位移。偶然的观察者可能会认为使用了位移,因为一个静态函数名为 numeric_shift_right。但是,该函数是从位数计算除数的,并执行了除法。在这里,我们使其更清楚。此更改仅是外观上的,不会影响 numeric 版本函数的返回值。在此,我们还为 pg_size_pretty() 的两个版本添加了一组回归测试,这些测试直接测试函数切换到下一个单位之前和之后的返回值。此错误是在 8a1fab36a 中引入的。在此之前,负值总是以字节显示。作者:Dean Rasheed, David Rowley 讨论:https://postgr.es/m/CAEZATCXnNW4HsmZnxhfezR5FuiGgp+mkY4AzcL5eRGO4fuadWg@mail.gmail.com 回溯兼容至:9.6,引入此错误的版本。 https://git.postgresql.org/pg/commitdiff/55fe609387685de1c754332e260b2d0e17d257dc
在 pg_size_pretty 和 pg_size_bytes 中使用单位查找表。多年来,我们已经开发了 2 个版本的 pg_size_pretty,一个用于 BIGINT,一个用于 NUMERIC。两者都应该输出相同的结果,但保持同步比需要的更难,因为两个函数都没有共享关于应使用哪些单位以及如何过渡到下一个最大单位的真相来源。在这里,我们添加了一个静态数组,它定义了我们识别的单位,并让 pg_size_pretty 和 pg_size_pretty_numeric 都使用它。这将使将来添加任何单位的任务非常简单。该表包含所有必要的信息,也允许我们修改 pg_size_bytes 来使用查找表,因此也调整它。这里没有行为上的变化。作者:David Rowley 审阅者:Dean Rasheed, Tom Lane, David Christensen 讨论:https://postgr.es/m/CAApHDvru1F7qsEVL-iOHeezJ+5WVxXnyD_Jo9nht+Eh85ekK-Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/56ff8b29919f75a078969766393b9e20871a75c8
让 pg_size_pretty 和 pg_size_bytes 认识 PB(拍字节)。之前有讨论过添加直到 YB(尧字节)的单位,但似乎没有人需要那些单位的可能性非常渺茫。由于这些大单位并不常见,因此 pg_size_pretty 输出比 PB 更大的单位似乎不太可能对任何人有帮助。由于 PB 就在眼前,我们只添加那些。也许有一天我们会添加其他单位,但现在在数据库大小方面,可能需要一段时间才能考虑 PB 以上的单位。作者:David Christensen 讨论:https://postgr.es/m/CAOxo6XKmHc_WZip-x5QwaOqFEiCq_SVD0B7sbTZQk+qqcn2qaw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ca2e4472ba7b6e5e8cd8955eacffb90e4d88d085
Álvaro Herrera 提交
改进 TestLib::system_or_bail 的错误报告。原始代码没有引用完整的失败命令,也没有打印失败原因。现在两者都做了。这仅是外观上的改动,所以不回溯。作者:Álvaro Herrera alvherre@alvh.no-ip.org 审阅者:Tom Lane tgl@sss.pgh.pa.us 审阅者:Daniel Gustafsson daniel@yesql.se 讨论:https://postgr.es/m/202106301524.eq5pblzstapj@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/5798ca529935698ab976780565fb2b4d8d34d810
libpq:修复在管道中止状态下发送查询。在管道模式下发送查询时,我们不小心地将连接留在错误的状态,导致 PQgetResult 行为不正确;在发送有错误的查询结果后尝试读取更多结果有时会挂起。通过确保正确更改内部 libpq 状态来修复。所有状态更改都由 pqAppendCmdQueueEntry() 的调用者完成;在每个调用者中都包含此逻辑将变得过于重复,因此将其全部放入该函数中,并减轻调用者的责任。添加测试来验证此情况。没有代码修复,此新测试有时会挂起。此外,请记录 PQisBusy() 在没有待处理结果查询时返回 false。这一点并不直观,此时调用 PQgetResult() 将获得 NULL,这令人困惑。由 Boris Kolpackov 撰写。顺便,根据 Ranier Vilela 的建议,修复了“false”的错误用法,将其解释为“0”。回溯兼容至 14。作者:Álvaro Herrera alvherre@alvh.no-ip.org 报告者:Boris Kolpackov boris@codesynthesis.com 讨论:https://postgr.es/m/boris.20210624103805@codesynthesis.com https://git.postgresql.org/pg/commitdiff/ab09679429009bfed4bd894a6187afde0b7bdfcd
Fujii Masao 提交
postgres_fdw:收紧 batch_size、fetch_size 选项允许的值。以前,值如 '100$%$#$#'、'9,223,372,' 被接受并被视为 postgres_fdw 选项 batch_size 和 fetch_size 的有效整数。而 fdw_startup_cost 和 fdw_tuple_cost 选项则不是这种情况,它们会引发错误。这是因为在使用 strtol 将字符串转换为整数时没有使用 endptr。此提交更改了逻辑,使其使用 parse_int 函数而不是 strtol,因为它通过在无法将字符串转换为整数时返回 false 来达到目的。请注意,此函数还将 '100.456' 之类的值四舍五入为 100,将 '100.567' 或 '100.678' 四舍五入为 101。在此期间,使用 parse_real 来处理 fdw_startup_cost 和 fdw_tuple_cost 选项。由于 parse_int 和 parse_real 已用于 reloptions 和 GUC,因此在 postgres_fdw 中使用它们比直接使用 strtol 和 strtod 更合适。回溯兼容至 v14。作者:Bharath Rupireddy 审阅者:Ashutosh Bapat, Tom Lane, Kyotaro Horiguchi, Fujii Masao 讨论:https://postgr.es/m/CALj2ACVMO6wY5Pc4oe1OCgUOAtdjHuFsBDw8R5uoYR86eWFQDA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d854720df6df68cfe1432342e33c9e3020572a51
文档:修复关于 pg_stat_statements.track_planning 的描述。此提交修复了关于 track_planning 选项的描述中的错误措辞,例如“a fewer kinds”(一种更少种类)。回溯兼容至 v13,即添加 pg_stat_statements.track_planning 的版本。作者:Justin Pryzby 审阅者:Julien Rouhaud, Fujii Masao 讨论:https://postgr.es/m/20210418233615.GB7256@telsasoft.com https://git.postgresql.org/pg/commitdiff/9d2a7757347cb1adb48599fce4dcde0f1fc9e9ae
Daniel Gustafsson 提交
Thomas Munro 推送
删除更多关于信号量的过时注释。提交 6753333f 停止使用信号量作为重量级锁的睡眠/唤醒机制,但注释中仍保留了一些过时的引用。与类似的提交 25b93a29 一样,回溯兼容至所有版本。审阅者:Daniel Gustafsson daniel@yesql.se 讨论:https://postgr.es/m/CA%2BhUKGLafjB1uzXcy%3D%3D2L3cy7rjHkqOVn7qRYGBjk%3D%3DtMJE7Yg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/2f783380641db4cc598acd108186a446e4919290
修复 pgbench 时间戳错误。提交 547f04e 将 pgbench 改为使用微秒计数,但引入了两个日志记录和聚合错误:1. 我们打印 Unix 纪元时间戳,以便您可以将其与其他日志进行关联,但这些时间戳无意中被更改为使用系统依赖的参考纪元。计算 Unix 时间戳,并将聚合间隔开始于整个 Unix 纪元秒的边界,如前所述。2. 用户提供的聚合间隔需要进行缩放。回溯兼容至 14。作者:Fabien COELHO coelho@cri.ensmp.fr 作者:Yugo NAGATA nagata@sraoss.co.jp 作者:Kyotaro Horiguchi horikyota.ntt@gmail.com 报告者:YoungHwan Joo rulyox@gmail.com 报告者:Gregory Smith gregsmithpgsql@gmail.com 讨论:https://postgr.es/m/CAF7igB1r6wRfSCEAB-iZBKxkowWY6%2BdFF2jObSdd9%2BiVK%2BvHJg%40mail.gmail.com 讨论:https://postgr.es/m/CAHLJuCW_8Vpcr0%3Dt6O_gozrg3wXXWXZXDioYJd3NhvKriqgpfQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/0e39a608ed5545cc6b9d538ac937c3c1ee8cdc36
Jeff Davis 推送
消除与 IDENTIFY_SYSTEM 相关的复制协议错误。IDENTIFY_SYSTEM 在 START_REPLICATION 之前运行的要求既未被记录也非必要。移除此错误并确保在 START_REPLICATION 中初始化 ThisTimeLineID。选择不回溯,因为此要求是预期行为(尽管执行不一致),并且不太可能造成任何重大问题。作者:Jeff Davis 审阅者:Andres Freund 讨论:https://postgr.es/m/de4bbf05b7cd94227841c433ea6ff71d2130c713.camel%40j-davis.com https://git.postgresql.org/pg/commitdiff/8e7811e952b4e0993330f7ac1fb1448a1ca69b9a
修复 assign_record_type_typmod()。如果错误发生在错误的位置,则可能导致哈希表中留下未初始化的条目,从而导致崩溃。已修复。此外,在 CacheMemoryContext 中进行更仔细的操作顺序,以免发生内存泄漏,或不必要地推进 NextRecordTypmod。回溯兼容至版本 11。早期版本(35ea75632a5 之前)不会出现此问题,因为未初始化的哈希条目包含一个有效的空列表。作者:Sait Talha Nisanci Sait.Nisanci@microsoft.com 审阅者:Andres Freund 讨论:https://postgr.es/m/HE1PR8303MB009069D476225B9A9E194B8891779@HE1PR8303MB0090.EURPRD83.prod.outlook.com 回溯兼容至:11 https://git.postgresql.org/pg/commitdiff/dd0e37cc1598050ec38fa289908487d4f5c96dca
Jie Zhang 提交了一个补丁,使 libpq 的 PQsendFlushRequest 返回文档中指定的 0 而不是代码中的 false。
Gilles Darold 提交了另一个补丁修订版,添加了新的事件 XACT_EVENT_COMMAND_START 和 SUBXACT_EVENT_COMMAND_START,这些事件可以在 xact 回调中捕获到即将执行的新命令。
Ranier Vilela 提交了一个补丁,以修复 src/backend/utils/adt/varlena.c 中可能存在的未初始化变量声明。
Ronan Dunklau 和 Ranier Vilela 交换了补丁,允许 Sort 节点使用快速的“单数据”元组排序。
Andrey V. Lepikhov 提交了另外两个补丁修订版,用于教会优化器考虑非分区表的按分区连接(与分区表的每个分区),并禁止连接两个分区(或附加)关系的不对称机制,因为这可能导致 NestLoop 路径的重新参数化期间出现巨大的 CPU 和内存消耗。
Victor Spirin 提交了两个补丁修订版,使 Windows 上的重命名操作具有原子性。
Peter Smith 提交了一个补丁,增加了 psql 的 CREATE PUBLICATION 选项卡完成的细微差别。
Amit Langote 提交了另一个补丁修订版,用于导出 get_partition_for_tuple(),并使用它来避免对某些 RI 检查使用 SPI。
Hou Zhijie 提交了另一个补丁修订版,使表能够被注解为安全允许(或不允许)并行 DML,并使用此功能使 INSERT ... SELECT 中可以使用并行查询,并添加了一个 pg_get_table_parallel_dml_safety(regclass) 函数。
Dilip Kumar 提交了一个补丁,使 CREATE DATABASE 成为 WAL 日志记录操作,以避免因检查点和大量的写操作而导致先前实现带来的负担。
Zeng Wenjing 提交了一个补丁,用于更早地检查同步备用。
Vigneshwaran C 提交了另一个补丁修订版,用于在 CREATE/ALTER SUBSCRIPTION 期间识别发布者中丢失的订阅。
Dipesh Pandit 提交了一个补丁,通过维护正在归档的当前文件的日志段号并将其加 1 来获取下一个 WAL 文件,从而减轻 WAL 归档器中 O(N^2) 的目录扫描。
Justin Pryzby 提交了一个补丁,在 procarray.c 中添加了一些 ASSERTIONs,并向 pg_resetwal.c 添加了一个新的 oldest-transaction-id 可选参数。
Gilles Darold 提交了另外三个补丁修订版,为 PostgreSQL FDW 添加了 CASE 子句的下推。
Bharath Rupireddy 和 Peter Smith 交换了补丁,使 parse_subscription_options 函数负责提前清除 SubOpts 参数,而不是期望调用者这样做,并移除对“supported_opts”的冗余条件检查,因为我们已经知道该选项必须受支持。
Ajin Cherian, Amit Kapila 和 Peter Smith 交换了补丁,为逻辑复制添加了对预备事务的支持。
Vigneshwaran C 提交了另外两个补丁修订版,用于在出现重复选项错误时通过包含选项名称来增强错误消息。
Greg Nancarrow 提交了另一个补丁修订版,添加了一个新的“client_connection”事件以及相应的客户端连接触发器支持。
Gurjeet Singh 提交了一个补丁,明确指出 --sync-only 不会修改数据。
Kyotaro HORIGUCHI 提交了一个补丁,使 FPI_FOR_HINT 遵循标准的 FPI 发送策略。
David Rowley 提交了另一个补丁修订版,移除了 BIGINT 序列 MINVALUE/MAXVALUE 值上无用的 int64 范围检查。
Bharath Rupireddy 提交了另一个补丁修订版,通过更具体地说明无法将某个对象添加到发布中的原因来改进发布错误消息。
Andy Fan 提交了另一个补丁修订版,扩展了规划器中唯一性(uniqueness)的使用方式。
Gurjeet Singh 提交了一个补丁,当 initdb 的 --sync-only 选项与其他选项混合使用时发出警告。
Dean Rasheed 提交了另一个补丁修订版,修复了 NUMERIC 类型上指数运算中的精度损失错误并防止了一些溢出错误。
Bruce Momjian 提交了另外三个补丁修订版,修复了一个导致可见性图损坏的错误。
Dagfinn Ilmari Mannsåker 提交了一个补丁,在适当的情况下使用了 `l*_node()` 系列函数。
Li Japin 和 Ranier Vilela 交换了补丁,用于验证 parse_subscription_options 中的 slot_name。
Yugo Nagata 提交了另一个补丁修订版,用于避免某些 pgbench 错误。
Euler Taveira de Oliveira 和 Greg Nancarrow 交换了补丁,为逻辑复制实现了行过滤。
Takamichi Osumi 提交了一个补丁,修复了一个导致事务统计信息测量逻辑复制进度的错误。
Fabien COELHO 提交了另外两个补丁修订版,将 rand48 替换为更好的 PRNG。
Masahiko Sawada 提交了一个补丁,用于澄清 ALTER SUBSCRIPTION 关于 refresh_option 选项的文档。
Robert Haas 提交了另一个补丁修订版,重构了 basebackup.c。
Seino Yuki 提交了一个补丁,用于跟踪物化视图的统计信息。
Georgios Kokolatos 提交了另一个补丁修订版,用于让 pg_receivewal 支持 lz4 压缩。
Kyotaro HORIGUCHI 提交了两个补丁修订版,以便严格拒绝命令行中无效的数值参数,并对被假定为数值的环境变量发出抱怨。
Alexander Lakhin 和 Michaël Paquier 交换了补丁,以修复 pg_ls_dir。
Quan Zongliang 提交了四个补丁修订版,修复了一个当块大小为 32k 时,pageinspect 中的 page_header 函数返回负数的错误。
Bharath Rupireddy 提交了另一个补丁修订版,用于区分使用“非负”的错误消息。
Atsushi Torikoshi 提交了另一个补丁修订版,添加了一个函数,用于记录与指定进程 ID 正在后端运行的查询相关的、未截断的查询字符串及其计划。
Hou Zhijie 提交了另一个补丁修订版,为发布添加了模式级别的支持。
Bertrand Drouvot 提交了另一个补丁修订版,修复了一个导致逻辑解码关系重写(带 toast)未重置 toast_hash 的错误。
Georgios Kokolatos 提交了一个补丁,用于测试 pg_receivewal 中的 gzip 压缩。
Pavel Borisov 提交了另一个补丁修订版,通过 LIST 和 HASH 自动生成分区。
Amul Sul 提交了另一个补丁修订版,添加了一个 RelationGetSmgr 内联函数。
David Rowley 提交了另一个补丁修订版,用于在 RelOptInfo 中跟踪未修剪的分区,并在更多情况下允许有序分区扫描。
Dagfinn Ilmari Mannsåker 提交了一个补丁,为 psql 的 CREATE SCHEMA 添加了选项卡完成。
Zhihong Yu 提交了一个补丁,缩短了 find_hash_columns() 中对必需列的测试。
Nathan Bossart 提交了另一个补丁修订版,用于预分配 WAL 段。
Tomáš Vondra 提交了另一个补丁修订版,使 pg_dump 能够单独转储函数。
Peifeng Qiu 提交了一个补丁,为 postgres_fdw 添加了对 Kerberos 身份验证的支持。
Erik Rijkers 提交了一个补丁,将 JSON 操作作为 JIT 编译的候选。
Fabien COELHO 提交了另一个补丁修订版,用于提取 psql 中的 echo 代码。
David Rowley 提交了一个补丁,将 Result 缓存节点重命名为 Memoize。
Soumyadeep Chakraborty 提交了另一个补丁修订版,用于在 pg_stats 中显示长度和边界直方图。
Ranier Vilela 提交了一个补丁,通过检查数组项的最大限制来防止 src/backend/access/nbtree/nbtxlog.c 中可能的内存损坏。
Thomas Munro 提交了另一个补丁修订版,为 psql 的 \watch 命令添加了一个 PSQL_WATCH_PAGER 设置。