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 版本 2021.05,一个监控和报告 PostgreSQL 等的应用程序,已发布
https://archives.postgresql.org/pgsql-jobs/2021-07/
Planet PostgreSQL:https://planet.postgresql.org/
本周的 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间下午 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 的大多数错误消息都采用了“关系“%s”不是表、外部表或物化视图”的模式。这种风格可能会变得冗长且难以维护。而且,它不是很有帮助:如果我尝试在不支持的 TOAST 表上创建注释,那么我可以对物化视图创建注释的信息毫无意义。相反,编写主要错误消息时应更简短,并更直接地说明尝试的操作是不可能的。然后,在详细消息中,解释该操作不支持该对象的 relkind。为了简化这一点,添加了一个新的函数 errdetail_relkind_not_supported() 来执行此操作。顺便说一下,在适当的地方使用 RELKIND_HAS_STORAGE(),而不是单独列出 relkind。审核人: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 进行审查和性能测试,感谢 Ranier Vilela 提供其他建议。讨论:https://postgr.es/m/CAEZATCUmeFWCrq2dNzZpRj5+6LfN85jYiDoqm+ucSXhb9U2TbA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f025f2390e13d7da69da595086fb982bbaf7f329
修复由于小数点后位数过多而导致的 numeric_mul() 溢出。如果结果的小数点后有超过 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 子句,则情况并非如此:我们将生成一个没有子节点的虚拟子计划 Result。添加缺失的空值检查,以防止在这种情况下崩溃。根据 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 的错误 #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 标志。如果该函数简化为常量,则它肯定不包含横向引用,因此这种简化在逻辑上是正确的。这是必要的,因为其他一些地方会断言 RESULT RTE 不是 LATERAL。根据 Yaoguang Chen 的错误 #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。根据构建场成员 hoverfly。讨论:https://postgr.es/m/17083-a19190d9591946a7@postgresql.org https://git.postgresql.org/pg/commitdiff/31e8cfac5845fa57e1805f4ff81e00ab78dff025
再次修复 AIX 构建的中断。我错误地诊断了 hoverfly 不高兴的原因。仔细观察,它似乎在没有 libssl 的情况下无法链接 libldap;因此问题在于我在进行检查之前清除 LIBS 的想法。恢复到基本原始的编码,除了当 libldap_r 不存在时,使用 libldap 而不是失败。根据构建场成员 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 中。根据构建场成员 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 的错误 #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 机制的通用接口重构 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 的一部分,它为 wal_compression 引入了 LZ4 支持。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 指针数组,但每个元素指向的 Datums 不需要单独分配。一个大块就可以了。对于 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(值)。类似于 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。但是,该函数是从位数计算除数并执行除法。这里我们使它更清晰。此更改只是表面上的,不会影响该函数的数值版本的返回值。这里我们还添加了一组 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 中使用查找表来表示单位。多年来,我们已经开发了 pg_size_pretty 的 2 个版本,一个用于 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 了解拍字节。有人谈到要添加一直到尧字节的单位,但似乎不太可能有人会需要这些单位。由于如此大的单位并不常见,因此 pg_size_pretty 输出大于拍字节的单位似乎实际上对任何人都没有帮助。由于拍字节即将出现,所以我们只添加这些。也许有一天我们会添加其他单位,但是在数据库大小方面,在我们需要考虑超出拍字节之前,可能还需要一段时间。作者: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
藤井正雄推送了
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
doc:修复有关 pg_stat_statements.track_planning 的描述。此提交修复了有关 track_planning 选项的描述中的错误措辞,如“较少种类”。向后移植到添加 pg_stat_statements.track_planning 的 v13。作者: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 相关的复制协议错误。在 START_REPLICATION 之前运行 IDENTIFY_SYSTEM 的要求既没有记录,也没有必要。删除该错误并确保在 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 节点使用快速的“单数据”tuplesort。
Andrey V. Lepikhov 提交了两个补丁修订版,旨在教优化器考虑非分区表与分区表的每个分区进行分区式连接,并禁止对两个分区(或追加)关系进行非对称连接机制,因为它可能在 NestLoop 路径的重新参数化期间导致巨大的 CPU 和内存消耗。
Victor Spirin 提交了两个补丁修订版,以使 Windows 上的重命名操作具有原子性。
Peter Smith 提交了一个补丁,为 psql 的 CREATE PUBLICATION 的 tab 补全添加了更多细微之处。
Amit Langote 提交了另一个补丁修订版,用于导出 get_partition_for_tuple(),并使用它来避免对某些 RI 检查使用 SPI。
侯志杰提交了另一个补丁修订版,使其能够将表标记为安全允许(或不允许)并行 DML,并在 INSERT ... SELECT 中使用它来实现并行查询,并添加一个 pg_get_table_parallel_dml_safety(regclass) 函数。
Dilip Kumar 提交了一个补丁,使 CREATE DATABASE 成为 WAL 日志记录操作,以避免检查点和写入风暴,这使得之前的实现繁琐。
曾文静提交了一个补丁,用于更早地检查同步备用服务器。
Vigneshwaran C 提交了另一个补丁修订版,用于在 CREATE/ALTER SUBSCRIPTION 期间识别发布者中缺少的发布。
Dipesh Pandit 提交了一个补丁,通过维护正在归档的当前文件的日志段号,并将其加“1”来获取下一个 WAL 文件,从而缓解 WAL 归档器中 O(N^2) 的目录扫描。
Justin Pryzby 提交了一个补丁,在 procarray.c 中添加了一些 ASSERTION,并向 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 提交了另一个补丁修订版,以扩展在规划器中使用唯一性的方式。
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 提交了两个补丁修订版,以用更好的 PRNG 替换 rand48。
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 的后端上当前运行的查询计划。
侯志杰提交了另一个补丁修订版,为发布添加架构级别的支持。
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 添加 tab 补全。
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 Cache 节点的名称更改为 Memoize。
Soumyadeep Chakraborty 提交了另一个补丁修订版,以在 pg_stats 中显示长度和边界直方图。
Ranier Vilela 提交了一个补丁,通过检查数组项的最大限制来防止 src/backend/access/nbtree/nbtxlog.c 中可能发生的内存损坏。
Thomas Munro 提交了另一个补丁修订版,为 psql 的 \watch 命令添加 PSQL_WATCH_PAGER 设置。