PostgreSQL 14 的下一个 Commitfest 已开始。如果您是补丁的作者,请务必跟进评审,以便您的贡献能够准备好被提交。
发布了 pgbitmap 0.93,这是一个空间优化、非稀疏的位图类型。 https://pgxn.org/dist/pgbitmap/
发布了 Pgpool-II 4.2 beta1 https://www.pgpool.net/docs/42/en/html/release-4-2-0.html
发布了 pglogical 2.3.3,一个基于 WAL 的 PostgreSQL 逻辑复制系统。 https://www.2ndquadrant.com/en/resources/pglogical/release-notes/
发布了 pg_activity 1.6.2,一个类似 top 的 PostgreSQL 服务器活动监控应用程序。 https://github.com/dalibo/pg_activity/releases/tag/v1.6.2
发布了 pg_dumpbinary 2.3,一个用于以二进制格式转储 PostgreSQL 数据库的程序。 https://github.com/lzlabs/pg_dumpbinary/releases/
发布了 pgCenter 0.6.6,一个用于观察和故障排除 PostgreSQL 的命令行管理工具。 https://github.com/lesovsky/pgcenter/releases/tag/v0.6.6
Planet PostgreSQL: http://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间周日中午 3:00 前将新闻和公告提交至 david@fetter.org。
David Rowley 提交
防止关系中出现过大的行数估计值和 NaN。对于一个包含足够多 join 的查询,查询规划器在乘以 join 选择性后,估计的行数可能会超过 double 数据类型的限制而变成无穷大。为了说明达到这种情况所需例外的极端程度,报告中的特定示例需要与一个没有任何统计信息的表进行 379 次 join,这导致 join 选择性使用了 1.0/DEFAULT_NUM_DISTINCT。这最终导致行数估计值无穷大,并在 initial_cost_mergejoin() 中出现断言失败,因为无穷大的行数估计值乘以 0.0 的 outerstartsel 导致 NaN。失败的断言验证了 NaN <= Inf,这是错误的。为了解决这个问题,我们使用 clamp_row_est() 将行数估计值上限设置为 1e100。这个值被认为是足够低的,以至于由此产生的成本将保持在 double 类型可表示的范围内。除了修复断言失败之外,这还有一个额外的好处,即 add_path() 仍然会收到正确的数值作为成本,这将使其在确定上述极端情况下的更便宜路径时做出更明智的选择。此外,我们还消除了 join 成本计算函数中的 isnan() 检查。最初触发这些检查的代码从未发送到邮件列表。很可能新添加到 clamp_row_est() 的代码将使这些检查变得冗余,因此我们将其删除。这个相对无害的断言失败问题也存在于后向分支中,但那里将应用一个更简单的修复。报告者:Onder Kalaci 评审者:Tom Lane 讨论:https://postgr.es/m/DM6PR21MB1211FF360183BCA901B27F04D80B0@DM6PR21MB1211.namprd21.prod.outlook.com https://git.postgresql.org/pg/commitdiff/a90c950fc7fd8796daa8c7948e7046bceb272894
优化一些 list_delete_ptr 调用。在少数几个地方,我们调用了 list_delete_ptr() 来从 List 中删除一个元素。在许多这些地方,我们知道,或者通过一点额外的努力就可以知道我们需要删除的 ListCell 的索引。这里我们将所有这些地方改为使用以下函数之一:list_delete_nth_cell()、foreach_delete_current() 或 list_delete_last()。这些函数都避免了遍历列表以根据指针值查找要删除的元素。这样做可以获得一些小的性能提升,但在一般情况下,这些列表不太可能很大,所以查找的成本可能本来就不高。但是,有些调用是在相当热门的代码路径中,例如 process_equivalence()。因此,在那里的任何微小收益都是有用的。作者:Zhijie Hou 和 David Rowley 讨论:https://postgr.es/m/b3517353ec7c4f87aa560678fbb1034b@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/e7c2b95d37a2b9c01367f7ccc55703555b39c81c
修复函数头注释中的参数名错误。作者:Zhijie Hou 讨论:https://postgr.es/m/14cd74ea00204cc8a7ea5d738ac82cd1@G08CNEXMBPEKD05.g08.fujitsu.local 后向移植到:12,错误在此处引入 https://git.postgresql.org/pg/commitdiff/e83c9f913c6197586af8ac53c1d3652db15a3c91
Michaël Paquier 提交
修复 pgcrypto 中潜在的内存泄漏。在分配 EVP 上下文时,如果上下文初始化分配失败,OpenSSL 分配的一些内存可能会被泄漏,而 PostgreSQL 会失去对其的跟踪。清理可以使用 EVP_MD_CTX_destroy() 来完成。注意,EVP API 自 OpenSSL 0.9.7 起就已存在,并且自 ce9b75d(在 10~ 版本中移除的代码 9b7cd59a)以来,我们为旧版本提供了等效的实现。然而,在 9.5 和 9.6 中,现有代码在使用 EVP_MD_CTX_destroy() 和 EVP_MD_CTX_create() 时没有等效实现,当使用 OpenSSL 0.9.6 或更早版本构建时,这意味着此代码实际上在这些版本中是损坏的,因为它是在 e2838c5 中引入的。由于我们没有收到任何抱怨,因此在 9.5 和 9.6 中似乎不值得为此烦恼,因此我们将其排除在外以简化。作者:Michael Paquier 讨论:https://postgr.es/m/20201015072212.GC2305@paquier.xyz 后向移植到:9.5 https://git.postgresql.org/pg/commitdiff/ca2a12c935f75fb56c3b14527d6f2ff6f549ea85
审查 PerfectHash.pm 生成的代码格式。80f8eb7 向快速检查头文件添加了 PerfectHash.pm 生成的代码,该代码与此存储库的 gitattributes 设置不兼容,因为表行的第一个元素之后是制表符。与其添加新的 gitattributes 异常,不如重新设计生成的格式,使其使用空格右填充而不是左填充。这使得生成的表保持可读的列集,从而无需更新 gitattributes。报告者:Peter Eisentraut 作者:John Naylor 讨论:https://postgr.es/m/d601b3b5-a3c7-5457-2f84-3d6513d690fc@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/19ae53c92d5f5bdfb971d560a562e84c5f65c8b0
提高后端 Unicode {de,re}composition 的性能。这用两个完美哈希函数替换了现有的二分查找,用于后端代码中的组合和分解,代价是二进制文件略微增大(libpgcommon_srv.a 中 35kB)。根据测量结果,这使 NFC 和 NFKC 转换的重组和分解速度提高了 30-40 倍,同时所有其他操作至少快了 40%。这不如 libicu 的性能“好”,但根据 Daniel Verite 的反馈,它大大缩小了差距。分解表保持不变,用于前端代码中的二分查找,在前端代码中,我们更关心 libpq 等库的大小而不是性能,因为这仅涉及与 SCRAM 身份验证相关的代码路径。因此,请注意,重组的完美哈希函数需要使用新的反向查找数组来查找现有的分解表。即使启用了 --enable-debug,所有前端可交付成果的大小也保持不变,包括 libpq。作者:John Naylor 评审者:Michael Paquier、Tom Lane 讨论:https://postgr.es/m/CAFBsxsHUuMFCt6-pU+oG-F1==CmEp8wR+O+bRouXWu6i8kXuqA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/783f0cc64dcc05e3d112a06b1cd181e5a1ca9099
在 psql 中为 ALTER TABLE .. FORCE ROW LEVEL SECURITY 添加制表符补全。这会补全 FORCE 和 NO FORCE 选项,NO INHERIT 需要进行小调整。作者:Li Japin 讨论:https://postgr.es/m/15B10F9F-5847-4F5E-BD66-8E25AA473C95@hotmail.com https://git.postgresql.org/pg/commitdiff/0b46e82c06b0c4b0dc6a94a890d23945ebf720fd
修复 --enable-coverage 和新的 unicode {de,re}composition 代码之间的兼容性问题。genhtml 在使用此新代码时会生成以下警告:WARNING: function data mismatch at /path/src/common/unicode_norm.c:102 HTML coverage reports care about the uniqueness of functions defined in source files, ignoring any assumptions around CFLAGS。783f0cc 引入了 get_code_entry() 的重复定义,导致警告并可能在报告中生成一些不正确的数据。这重构了代码,使其只有一个函数声明,修复了警告。783f0cc 的疏忽。报告者:Tom Lane 作者:Michael Paquier 评审者:Tom Lane 讨论:https://postgr.es/m/207789.1603469272@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/2771fcee18be0b86d2e008add20f73d175e06e90
扩展 PageIsVerified() 以处理更多自定义选项。这对于检查关系页面而不必将页面加载到共享缓冲区中非常有用,并且有两个用例可以利用它:基本备份中的页面验证以及在线、无锁的版本。通过一个调用新扩展例程的宏,可以保持与旧版本的兼容性,该宏使用与原始版本兼容的选项集。从同一作者的一个更大的补丁中提取。作者:Anastasia Lubennikova 评审者:Michael Paquier、Julien Rouhaud 讨论:https://postgr.es/m/608f3476-0598-2514-2c03-5c7d2b0cbd@postgrespro.ru https://git.postgresql.org/pg/commitdiff/d401c5769ef6aeef0a28c147f3fb5afedcd59984
添加 CheckBuffer() 以在不加载共享缓冲区的情况下检查磁盘上的页面。CheckBuffer() 被设计为并发安全的函数,能够对关系页面执行健全性检查,而无需将其加载到共享缓冲区中。该操作使用对共享缓冲区映射哈希表所涉及的分区进行锁定,并对缓冲区本身进行 I/O 锁定,从而防止由于任何并发活动导致的误报风险。此函数的主要用途是检测关系页面的磁盘损坏。如果页面存在于共享缓冲区中,则检查磁盘上的页面是否未被脏(如果页面被脏,后续的检查点将刷新页面的有效版本),因为页面可能长时间存在于共享缓冲区中,而其磁盘版本已损坏。例如,在主服务器断开连接的情况下,这种情况可能导致集群损坏。如果页面不在共享缓冲区中,则检查其磁盘状态。PageIsVerifiedExtended() 用于应用与页面加载到共享缓冲区时相同的健全性检查。此函数将由一个即将到来的补丁使用,该补丁能够通过 SQL 函数检查磁盘上的关系页面的状态。作者:Julien Rouhaud、Michael Paquier 评审者:Masahiko Sawada 讨论:https://postgr.es/m/CAOBaU_aVvMjQn=ge5qPiJOPMmOj5=ii3st5Q0Y+WuLML5sR17w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c780a7a90a8e7b074405ea2007e34f94e227e695
添加 pg_relation_check_pages() 来检查关系磁盘上的页面。这利用了 c780a7a 中引入的 CheckBuffer(),并添加了一个 SQL 包装器,能够检查关系的所有页面。默认情况下,会检查关系的全部分叉类型,并且可以选择只检查给定的关系分叉。请注意,如果输入的关系没有物理存储或为临时关系,则不会生成错误,从而允许在例如通过简单扫描 pg_class 来进行整个数据库的检查。这不限于启用了数据校验和的集群,因为没有数据校验和的集群仍然可以使用页面头信息或全零页面来检查页面。此函数返回一个元组集,由以下组成:- 检测到损坏页面的物理文件(不包含段号,因为这可能依赖于 AM,对于堆而言可以从块号推断)。使用相对于 PGPATH 的相对路径。- 损坏页面的块编号。默认情况下,只有超级用户才能访问此函数,但执行权限可以授予其他用户。此处引入的功能仍然是最小化的,并且可以进行更多改进,例如:- 添加开始和结束块号以检查块范围,这仅在检查一种分叉类型时适用。- 添加一些进度报告。
节流,带有函数输入中的配置参数或可能的基于成本的 GUC。回归测试已添加到主回归测试套件中的正面案例,并且 TAP 测试已添加到涉及页面损坏模拟的案例中。增加目录版本。作者:Julien Rouhaud、Michael Paquier 评审者:Masahiko Sawada、Justin Pryzby 讨论:https://postgr.es/m/CAOBaU_aVvMjQn=ge5qPiJOPMmOj5=ii3st5Q0Y+WuLML5sR17w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f2b883969557f4572cdfa87e1a40083d2b1272e7
在 pg_relation_check_pages() 中使用正确的 GetDatum()。使用了 UInt32GetDatum(),而结果需要 Int64GetDatum()。f2b8839 的疏忽。根据 buildfarm 成员 florican。讨论:https://postgr.es/m/1226629.1603859189@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ce7f772c5e6066e0bbafea5759e652c9757c8e6b
修复 pg_relation_check_pages() 中 pfree() 的放置错误。这会导致函数在 SRF 中报告一个以上的损坏页面时崩溃。报告者:Noriyoshi Shinoda 讨论:https://postgr.es/m/TU4PR8401MB11523D42C315AAF822E74275EE170@TU4PR8401MB1152.NAMPRD84.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/60a51c6b32960822d3987ea7d2816c65bdbcb314
为 pgcrypto 中的加密失败添加错误代码。PXE_DECRYPT_FAILED 已存在于解密错误,而加密并没有相应的错误代码。有一个代码路径处理 OpenSSL 的此类失败,但它使用了 PXE_ERR_GENERIC,这不一致。这会将该代码路径切换为使用新的错误 PXE_ENCRYPT_FAILED 而不是 PXE_ERR_GENERIC,从而使加密使用的代码与解密更一致。作者:Daniel Gustafsson 讨论:https://postgr.es/m/03049139-CB7A-436E-B71B-42696D3E2EF7@yesql.se https://git.postgresql.org/pg/commitdiff/aecaa04418f39c32adb3dbf91c4aa7f6e175f01c
在 REINDEX CONCURRENTLY 期间保留 pg_statistic 中的索引数据。与索引关联的统计信息在运行 REINDEX CONCURRENTLY 后会丢失,而非并发操作会正确地保留这些信息。为了最终用户的一致性,并发和非并发操作需要保持一致,缺失的统计信息将强制等待新的 ANALYZE 发生,这可能会根据现有 autovacuum 工作程序的活动花费一些时间。通过将 pg_statistic 中与旧索引关联的任何现有条目复制到新索引来修复此问题。请注意,这与统计信息收集器中的索引数据复制已在进行。报告者:Fabrízio de Royes Mello 作者:Michael Paquier、Fabrízio de Royes Mello 评审者:Justin Pryzby 讨论:https://postgr.es/m/CAFcNs+qpFPmiHd1oTXvcPdvAHicJDA9qBUSujgAhUMJyUMb+SA@mail.gmail.com 后向移植到:12 https://git.postgresql.org/pg/commitdiff/b17ff07aa3eb142d2cde2ea00e4a4e8f63686f96
Amit Kapila 提交
更改 Vacuum 的 PARALLEL 选项文档。执行并行 vacuum 操作的并行工作程序数量选择规则没有明确说明。报告者:Peter Eisentraut 作者:Amit Kapila 后向移植到:13,该选项在此版本中引入 讨论:https://postgr.es/m/36aa8aea-61b7-eb3c-263b-648e0cb117b7@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/560d260d7852dc54a8c587c1b388843e8c433bc8
更改 pg_stat_replication_slots 视图中的属性名称。将 pg_stat_replication_slots 视图中的属性 'name' 更改为 'slot_name',以使其更清晰,并与 pg_stat_wal_receiver 视图等其他显示相同属性的地方保持一致。在修改过程中,修复了相关代码中其中一个宏的拼写错误。增加 catversion,因为我们也在目录中修改了名称。报告者:Noriyoshi Shinoda 作者:Noriyoshi Shinoda 评审者:Sawada Masahiko 和 Amit Kapila 讨论:https://postgr.es/m/CA+fd4k5_pPAYRTDrO2PbtTOe0eHQpBvuqmCr8ic39uTNmR49Eg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/03d51b776d88badbeb4452c1ab452feb78dce36a
更新 pg_stat_replication_slots 视图中 spilled counters 的描述。这是为了使 spilled counters 的描述更清晰。作者:Amit Kapila 评审者:Sawada Masahiko 讨论:https://postgr.es/m/CA+fd4k5_pPAYRTDrO2PbtTOe0eHQpBvuqmCr8ic39uTNmR49Eg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2f0760c9ff827bb3d23ee327e6b46038000c7ef9
pg_stat_replication_slots 视图中 spilled counters 描述的微小改进。根据 Justin Pryzby 的建议。讨论:https://postgr.es/m/CA+fd4k5_pPAYRTDrO2PbtTOe0eHQpBvuqmCr8ic39uTNmR49Eg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9e0f87a4955ede0769d2f9a93171145b6ddab901
跟踪从 ReorderBuffer 流式传输更改的统计信息。这增加了关于从 ReorderBuffer 流式传输到解码输出插件的事务的统计信息。用户可以查询 pg_stat_replication_slots 视图来查看这些统计信息,并调用 pg_stat_reset_replication_slot 来重置特定槽的统计信息。用户可以将 NULL 传递给 pg_stat_reset_replication_slot 以重置所有槽的统计信息。提交 9868167500 添加了捕获槽统计信息的底层基础设施,此提交扩展了统计信息收集器以跟踪槽的其他信息。增加 catversion,因为我们向目录条目添加了新列。作者:Ajin Cherian 和 Amit Kapila 评审者:Sawada Masahiko 和 Dilip Kumar 讨论:https://postgr.es/m/CAA4eK1+chpEomLzgSoky-D31qev19AmECNiEAietPQUGEFhtVA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8e90ec5580d5345fef31005d7cc2215ba2125070
Peter Eisentraut 提交
改进空格。SQL 文件不一致地使用了制表符和空格。将所有内容转换为空格并相应地调整缩进。 https://git.postgresql.org/pg/commitdiff/afa0d53d4de6d2f43fbc0a76c88dceb22ba65e86
避免 shm_mq 中的无效 alloc size 错误。在 shm_mq_receive() 中,由于缓冲区大小的增加方式,一个巨大的有效负载可能会触发一个不合理的“无效内存分配请求大小”错误。添加错误检查(记录上限)并通过将分配大小限制为 MaxAllocSize 来避免此错误。作者:Markus Wanner markus.wanner@2ndquadrant.com 讨论:https://postgresql.ac.cn/message-id/flat/3bb363e7-ac04-0ac4-9fe8-db1148755bfa%402ndquadrant.com https://git.postgresql.org/pg/commitdiff/26ec6b5948a73d0e07ed9435ee4554594acdf34f
修复 Windows/MinGW 上的 -Wcast-function-type 警告。在 de8feb1f3a23465b5737e8a8c160e8ca62f61339 之后,仍然存在一些仅在使用 Windows 上的 GCC 时才可见的警告。也修复它们。请注意,ecpg 测试源文件不使用完整的 pg_config.h,因此我们不能在那里使用 pg_funcptr_t,而必须以长方式进行。 https://git.postgresql.org/pg/commitdiff/8a58347a3c10126ce9eb38872a46c55e91faa174
删除过时的 ifdefs。提交 8dace66e0735ca39b779922d02c24ea2686e6521 添加了对多个 errno 符号的 #ifdefs,因为它们在 Windows 上不存在。后来,提交 125ad539a275db5ab8f4647828b80a16d02eabd2 为其中一些符号添加了替换 #defines。因此,第一个提交的一些更改被第二个提交的代码所淘汰,现在可以删除。讨论:https://postgresql.ac.cn/message-id/flat/6dee8574-b0ad-fc49-9c8c-2edc796f0033@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/555eb1a4f0114e1c4017093fe840045dde1ed9ea
在 Perl 代码中适当时使用 croak 而不是 die。 https://git.postgresql.org/pg/commitdiff/f8721bd752790859df747905bc44fb5ad8dbf07d
doc: 修复列表中协议消息的顺序。AuthenticationGSSContinue 和 AuthenticationSSPI 的顺序被交换,基于其他 Authentication* 协议消息按子代码顺序排列。 https://git.postgresql.org/pg/commitdiff/83d727e5b23c43f3fb7221963ddec24277c1126f
doc: 修复列表中协议消息的顺序。将 GSSENCRequest 移动到正确的字母顺序。 https://git.postgresql.org/pg/commitdiff/8fed2eadb8558185d162cc7fd09192c2e10b915f
使过程 OUT 参数在 JDBC 中正常工作。JDBC 驱动程序发送 OUT 参数的类型为 void。当调用函数时,这很合理,以便在 ParseFuncOrColumn() 中忽略这些参数。对于过程调用,我们希望将其视为未知。评审者:Andrew Dunstan andrew [AT] dunslane.net 讨论:https://postgresql.ac.cn/message-id/flat/d7e49540-ea92-b4e2-5fff-42036102f968%402ndquadrant.com https://git.postgresql.org/pg/commitdiff/9213462c539e6412fe0498a7f8e20b662e15c4ec
修复 enum errdetail 以提及字节而不是字符。枚举标签长度以字节为单位,而不是字符。作者:Ian Lawrence Barwick barwick [AT] gmail.com 评审者:Julien Rouhaud rjuju123 [AT] gmail.com 讨论:https://postgresql.ac.cn/message-id/flat/CAB8KJ=itZEJ7C9BacTHSYgeUysH4xx8wDiOnyppnSLyn6-g+Bw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0525572860335d050a1bea194a5278c8833304d1
添加 select_common_typmod()。这与 select_common_type() 和 select_common_collation() 相配合。Typmods 以前在多个地方使用手工编码的逻辑进行组合。select_common_typmod() 中的逻辑并不令人兴奋,但它使代码在几个地方更紧凑、更易读,并且将来我们可以根据需要做更复杂的事情。作为一项小改进,对于假设集聚合的直接和聚合参数的类型统一现在也使用此新函数进行 typmod 统一,而不仅仅是丢弃它。评审者:Heikki Linnakangas hlinnaka [AT] iki.fi 讨论:https://postgresql.ac.cn/message-id/flat/97df3af9-8b5e-fb7f-a029-3eb7e80d7af9@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/f893e68d761adbee7f888109b1adf76151e3e17a
Heikki Linnakangas 提交
清理 nodeModifyTable.c 中解析“根目标关系”的代码。在对分区表或具有继承子项的表执行 DDL 时,必须针对原始语句中提供的表触发语句级触发器。查找此信息的代码有点混乱且重复。提交 501ed02cf6 为其添加了一个辅助函数 getASTriggerResultRelInfo()(后来重命名为 getTargetResultRelInfo()),但出于某种原因,它仅在触发 AFTER STATEMENT 触发器时使用,并且触发 BEFORE STATEMENT 触发器的代码重复了该逻辑。在 ExecInitModifyTable() 中确定目标关系,并始终在 ModifyTableState 中设置它。曾经调用 getTargetResultRelInfo() 的代码现在可以直接使用 ModifyTableState->rootResultRelInfo。讨论:https://postgresql.ac.cn/message-id/CA%2BHiwqFViT47Zbr_ASBejiK7iDG8%3DQ1swQ-tjM6caRPQ67pT%3Dw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/f49b85d783f6781138f33bbe5f6e98da86907d84
修改子表到根表元组转换映射管理。将用于将子表格式的元组转换为根格式的元组转换映射存储在 ResultRelInfo 中的新 ri_ChildToRootMap 字段中。如果需要 FOR STATEMENT 触发器的转换元组捕获或分区表上的 INSERT 元组路由,则会对其进行初始化。以前,ModifyTable 将映射保存在每个子计划的 ModifyTableState->mt_per_subplan_tupconv_maps 数组中,或者在使用元组路由时,保存在 ResultRelInfo->ri_Partitioninfo->pi_PartitionToRootMap 中。新字段取代了两者。现在,子表到根表元组转换映射始终在 ResultRelInfo 中可用(在需要时),删除 TransitionCaptureState.tcs_map 字段。Exec*Trigger() 函数的调用者不再需要设置或保存它,这更不容易混淆和出错。此外,作为未来的优化,这将允许我们将给定结果关系的映射推迟到执行期间实际处理该关系时才创建。作者:Amit Langote 讨论:https://postgresql.ac.cn/message-id/CA%2BHiwqHtCWLdK-LO%3DNEsvOdHx%2B7yv4mE_zYK0i3BH7dXb-wxog%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/6973533650c04653d9018f61c1ac99ecb11094bd
删除 PartitionRoutingInfo 结构。通过其 enclosing ResultRelInfo 访问其成员所需的额外间接访问似乎没有意义。将 PartitionRoutingInfo 中的所有字段移至 ResultRelInfo。作者:Amit Langote 评审者:Alvaro Herrera 讨论:https://postgresql.ac.cn/message-id/CA%2BHiwqFViT47Zbr_ASBejiK7iDG8%3DQ1swQ-tjM6caRPQ67pT%3Dw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/fb5883da86154c3126264bfd97b0cd6f293bcebd
修复全文搜索距离运算符的文档。提交 028350f619 将其行为从“最多”更改为“正好”,但忘记更新文档。回溯到 9.6。由 Justin Pryzby 提供补丁,根据 Yaroslav Schekin 的报告。讨论:https://postgresql.ac.cn/message-id/20201005191922.GE17626%40telsasoft.com https://git.postgresql.org/pg/commitdiff/1a64c7636f24096155f7aa15d7164eba3cdef075
修复文档中 tsquery 示例的输出。此查询的输出在提交 4e2477b7b8 中发生了更改。回溯到 9.6,就像该提交一样。由 Justin Pryzby 提供补丁,根据 Yaroslav Schekin 的报告。讨论:https://postgresql.ac.cn/message-id/20201005191922.GE17626%40telsasoft.com https://git.postgresql.org/pg/commitdiff/c0bc4c682ee2a84dee2b562db3d17d173a6abc06
修复 TRUNCATE 文档:ALTER SEQUENCE RESTART 现在是事务性的。ALTER SEQUENCE RESTART 在提交 3d79013b97 中被事务化。回溯到 10 版本,该版本已引入。由 Justin Pryzby 提供补丁,根据 Yaroslav Schekin 的报告。讨论:https://postgresql.ac.cn/message-id/20201005191922.GE17626%40telsasoft.com https://git.postgresql.org/pg/commitdiff/2a972e0165c9b34da4cff3001a2dad8e5a9a5a2b
杂项文档修复。- 杂项语法和标点符号修复。- 样式清理:在示例中,函数参数和 JSON 字段之间使用空格。例如“foo(a,b)”->“foo(a, b)”。在少数缺少分号的 PL/pgSQL 示例的最后一个 END 之后添加分号。- 使关于“...”和“..”运算符的句子更清晰,避免以“..”结尾。这使其看起来与“...”相同。- 修复 HAVING 的语法描述:HAVING 条件不能重复。由 Justin Pryzby 提供补丁,根据 Yaroslav Schekin 的报告。回溯到所有支持的版本,只要补丁易于应用。讨论:https://postgresql.ac.cn/message-id/20201005191922.GE17626%40telsasoft.com https://git.postgresql.org/pg/commitdiff/c5f42daa6077a4c309c5280a47d0e114c12dc572
修复 EvalPlanQualStart() 中 es_result_relations 的初始化。提交 1375422c78 中有笔误。EvalPlanQualStart() 错误地重置了父 EState 的 es_result_relations,而它应该初始化它刚刚创建的子 EPQ EState 中的字段。这显然是错误的,但没有造成任何不良影响,因为 es_result_relations 在 ExecInit* 阶段之后目前未使用。作者:Amit Langote 讨论:https://postgresql.ac.cn/message-id/CA%2BHiwqFEuq8AAAmxXsTDVZ1r38cHbfYuiPQx_%3DYyKe2DC-6q4A%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/22b73d3cb0b5bb4c141421f98dd67f091dda3c20
doc: 删除对 8.2 版本之前 pg_dump 行为的引用。-t/--table 选项的行为更改发生在大约 15 年前,似乎没有必要保留它。作者:Ian Barwick 讨论:https://postgresql.ac.cn/message-id/CAB8KJ%3Dh-XALik4M7gv-pX48%3D%2BSPWexfaYwa%2ByTnPwD3DxceXrg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/902b57c9bf27b3ea2963ef832cddb38b1203130e
docs: 删除关于与非常旧版本不兼容的注释。这些版本太旧了,与帮助新读者升级相比,它们可能会引起更多的困惑和分散注意力。讨论:https://postgresql.ac.cn/message-id/fd93f1c5-7818-a02c-01e5-1075ac0d4def%40iki.fi https://git.postgresql.org/pg/commitdiff/fa42c2ecb0f6e89f74bc1cc37b56a1d43e45d513
修复新的 GiST sortsupport 函数的缺失验证。因此,如果您尝试创建带有新的 sortsupport 函数的运算符族,您会收到一个错误:ERROR: support function number 11 is invalid for access method gist。我们在添加 sortsupport 函数的 commit 16fa9b2b30 中错过了这一点,因为它只向内置的运算符族添加了 sortsupport。作者:Andrey Borodin 讨论:https://postgresql.ac.cn/message-id/3520A18A-5C38-4697-A2E3-F3BDE3496CD5%40yandex-team.ru https://git.postgresql.org/pg/commitdiff/6f0bc5e1daf09686c526aa161da5336f7c94f4eb
Magnus Hagander 已推送
Tom Lane 提交
修复在 SQL 函数结果强制类型转换中破坏列表的操作的 bug。自提交 913bbd88d 以来,check_sql_fn_retval() 可以选择内联类型强制转换步骤到生成 SQL 函数结果的 Query 中,或者生成一个新的顶级 Query 来执行强制转换,如果就地修改 Query 的输出不安全的话。然而,后者似乎从未真正起作用,因为代码试图将新 Query 注入到它被传递的查询列表中……而这并不是我们稍后在“正常”(不内联)执行 SQL 函数时将使用的列表。因此,我们最终在运行时没有进行任何强制转换,导致结果错误或崩溃,具体取决于所涉及的数据类型。虽然回归测试似乎在很大程度上涵盖了这一领域,但由于运气极差,所有测试用例都涉及单独的 Query 路径,要么是可内联的情况(偶然没有 bug),要么是运行时无操作的情况(例如,varchar 到 text),因此未执行强制转换并不明显。不支持的非工作用例在 v13 之前根本不允许,这可能也导致了问题没有被更早地发现。为了修复,我们放弃了独立的“扁平”Query 节点列表,而是传递将用于稍后的实际双层列表。我选择在 check_sql_fn_statements() 中也进行相同的更改,尽管它实际上没有 bug,只是为了我们不再需要该数据结构。这是一个 API 更改,正如函数(functions.c)外部调用者所需的调整所证明的那样。在已发布的版本中这样做有点令人担忧,但据我快速搜索,这些函数没有外部调用者(而且它们足够具体,与 SQL 语言函数相关,以至于任何扩展都需要调用它们并不明显)。无论如何,v13 已经改变了 check_sql_fn_retval() 相对于先前版本的 API。根据 pinker 的报告。回溯到 v13,此代码在此版本中引入。讨论:https://postgr.es/m/1603050466566-0.post@n3.nabble.com https://git.postgresql.org/pg/commitdiff/c8ab9701791e22f7a8e1badf362654db179c9703
修复 src/bin/scripts/ 程序中的连接字符串处理。当被告知处理所有数据库时,clusterdb、reindexdb 和 vacuumdb 会通过将它们的 --maintenance-db 参数替换为目标数据库的名称来重新连接。如果该参数是 connstring(虽然允许了很长时间,但在本补丁之前我们未能将其记录下来),我们将丢失它可能指定的任何其他选项,例如 SSL 或 GSS 参数,这可能导致连接失败。因此,这与 pg_dump 和 pg_restore 中的 commit a45bc8a4f 修复的 bug 相同。我们可以通过使用 libpq 处理多个“dbname”参数的规则来单独添加目标数据库名称来修复它。我选择应用与该补丁相同的重构方法,使用一个结构来处理需要传递给 connectDatabase 的命令行参数。(也许有一天我们可以统一此处和 pg_dump/pg_restore 中非常相似的函数。)根据 Peter Eisentraut 对 bug #16604 的评论。回溯到所有支持的分支。讨论:https://postgr.es/m/16604-933f4b8791227b15@postgresql.org https://git.postgresql.org/pg/commitdiff/8e5793ab60bba65ffaa0f2237b39c9580d8972c7
删除在 configure 外部构建 thread_test.c 的选项。理论上,你可以进入 src/test/thread 并在此处构建/运行此程序。实际上,自 96bf88d52 以来,这一点一直不起作用,在某些平台上(可能包括这种测试可能感兴趣的陈旧遗留系统)可能已经更长时间不起作用。虽然修复此中断并不难,但两年没有人注意到这一事实表明维护此构建路径没有任何用处。让我们删除它,并规定 thread_test.c *仅*用于 configure 构建。有了这个决定,将 thread_test.c 放在 config/ 下并完全删除 src/test/thread 是有意义的,所以我这样做了。顺便更新 src/test/README,它被一些非近期添加的子目录所忽略。讨论:https://postgr.es/m/227659.1603041612@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/8a2121185b26d7eb439860c7a96a08c0aa3c8508
修复 psql 的 \connect 命令中的连接字符串处理。psql 的 \connect 声称可以重新使用之前的连接参数,但实际上它只重新使用数据库名称、用户名、主机名(可能还有 hostaddr,取决于版本)和端口。这对于各种用例都很成问题。特别是,pg_dump[all] 会发出 "\connect databasename" 命令,我们希望这些命令能够重新使用所有其他参数。如果此类脚本在 psql 运行中加载,而该 psql 最初带有具有某些非默认参数的 "-d connstring",则这些其他参数将丢失,可能导致连接失败。(因此,这与 commit a45bc8a4f 和 8e5793ab6 中修复的 bug 类型相同,尽管细节大不相同。)为了修复,我们重新设计 do_connect(),使其通过 PQconninfo() 提取旧 PGconn 的所有属性,然后替换该数组中的各个属性。在不希望重新使用任何内容的情况下,使用 PQconndefaults() 获取 libpq 的默认设置并替换其中的条目,这样我们就不需要这两种情况下的不同代码路径。这确实会导致一些额外的行为变化,例如原始连接参数允许多个主机,例如“psql -h host1,host2”,并且 \connect 请求允许重新使用主机设置。因为之前的代码依赖于 PQhost(),它只允许重新连接到最初选择的主机。虽然可以设想某些场景下这是好事,但也有一些场景下并非如此。此外,这种行为似乎不符合“最小惊讶原则”,也没有被记录下来;甚至其意图也不清楚,因为这种编码早于 multihost 支持添加到 libpq 之前。因此,本补丁很乐意放弃它并重新使用给定的主机列表。根据 Peter Eisentraut 对 bug #16604 的评论。回溯到所有支持的分支。讨论:https://postgr.es/m/16604-933f4b8791227b15@postgresql.org https://git.postgresql.org/pg/commitdiff/85c54287af56fe351b53913ea2b81e9d6145f964
清理 psql 的 \connect 命令中一些不愉快的行为。检查是否抱怨没有旧连接来获取参数的行为已严重过时:在发明 connstring 和 -reuse-previous 选项时都没有重新考虑过。将其替换为一种检查,如果 reuse-previous 处于活动状态且我们没有可重用的旧连接,则会抛出错误。虽然这在简化服务器崩溃后的重新连接方面并未大大改变目标,但至少它是一致的。如果用户指定了一个 connstring 加上额外的参数(根据文档,这是无效的),额外的参数会被默默忽略。这似乎可能非常令人困惑,因此让我们改为抛出语法错误。教会 connstring 代码路径在与旧式语法代码路径相同的条件下重用旧连接的密码,即如果我们重用参数并且用户名、主机/hostaddr 和端口的值没有改变。也记录这种行为,因为它之前未被提及。此外,还简化了实现,产生了两个新的有用属性:如果 connstring 中有“password=xxx”,我们将使用它而不是忽略它,并且默认情况下(即,除了 --no-password 之外),如果重用的密码或 connstring 密码不起作用,我们将提示输入密码。之前的代码只会在重用密码不起作用时失败。鉴于对这些问题引起的现场抱怨很少,我认为它们不属于可回溯的 bug 修复,无论如何它们可能代表了次要版本中不希望的行为更改。所以不回溯。讨论:https://postgr.es/m/235210.1603321144@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/94929f1cf6cb3ea070d0919d1303379b525a72a3
为 ECPG 字面量查询中的引号添加文档和测试。ECPG 的 PREPARE ... FROM 和 EXECUTE IMMEDIATE 可以选择将目标查询作为简单的字面量,而不是更常见的字符串变量引用。这以前被记录为 C 字符串字面量,但在一个关键方面是谎言:你不能在这样的字面量中将数据双引号写成 \"。这是因为此时词法分析器处于 SQL 模式,因此它会将双引号字符串解析为标识符,其中反斜杠不具有特殊含义,因此 \" 会终止字面量。我研究了使其按记录工作,但让词法分析器在正确的时间点切换行为介于非常困难和不可能之间。这并不值得麻烦,因为这些情况几乎没有用:如果你有一个固定的 SQL 语句要执行或准备,你最好直接写成 EXEC SQL,省去了将其转换为字符串字面量的麻烦,并获得了编译时 SQL 语法检查的机会。相反,让我们仅记录(和测试)在这些情况下将双引号写成八进制转义符(\042)的解决方法。这里没有代码行为更改,所以原则上可以回溯,但这只是一个非常细微的情况,我怀疑是否值得费力。根据 1250kv 的报告。讨论:https://postgr.es/m/673825.1603223178@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c16a1bbcf498f0aa053a3e55008f57d7f67357dd
避免 ECPG 字符串中过早地取消双引号。如果你在 EXEC SQL 命令中写字面量 'abc''def',它会被解析为 'abc'def',导致后端出现语法错误。同样,"abc""def" 会被减少为 "abc"def",这对于带引号的标识符来说是错误的语法。原因是词法分析器认为它应该只发出一个引号,而实际上它应该保持字符串不变。添加一些文档和测试用例。虽然这显然是一个 bug,但我担心用户可能不希望在次要版本中更改它。有些人可能正在通过额外加倍受影响的引号来规避它,例如 sql/dyntest.pgc 已经这样做了。根据对 1250kv 报告的调查,虽然这不完全是他/她所指的内容。讨论:https://postgr.es/m/673825.1603223178@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/3dfb1942d9b8748b93094a430289e2f7f3b3ae0d
将我们的时区库副本与 IANA 发行版 tzcode2020d 同步。这里没有任何功能性变化,但我很好奇这个变化是否能成功消除 Coverity 关于无用 strcmp() 的警告,该警告出现在之前的更新中。讨论:http://mm.icann.org/pipermail/tz/2020-October/029370.html https://git.postgresql.org/pg/commitdiff/c5054da0d7ee59a93ca6d7f7fc669ef0210dbad3
将时区数据文件更新到 tzdata release 2020d。巴勒斯坦的 DST 法规发生变化,通知时间仅为 120 小时。还有一些关于巴勒斯坦的历史修正。 https://git.postgresql.org/pg/commitdiff/7d6d6bce43c60bb7b77237e2cc6ab845646b911f
修复 EXPLAIN 输出中增量排序的 XML 格式损坏。增量排序使用数据的 ExplainCloseGroup 参数与相应的 ExplainOpenGroup 不匹配。这仅对 XML 格式的输出很重要,这可能是我们没有注意到它的原因。Daniel Gustafsson,根据 Frits Jalvingh 的 bug #16683 报告 讨论:https://postgr.es/m/16683-8005033324ad34e9@postgresql.org https://git.postgresql.org/pg/commitdiff/87a174c0e77eed0bec7d53ef6d470d60335f6444
修复新的 amcheck 测试中的可移植性问题。commit 866e24d47 添加的测试在 big-endian 机器上失败,因为没有注意字节序问题。修复它。同时,改进一些小的外观问题,例如通过 perltidy 运行它。Mark Dilger 讨论:https://postgr.es/m/30B8E99A-2D9C-48D4-A55C-741C9D5F1563@enterprisedb.com https://git.postgresql.org/pg/commitdiff/860593ec3bd15e8969effdfcb5cbd98c561dd722
允许 psql 在连接丢失后重用连接参数。与立即 PQfinish 一个损坏的连接不同,将其保存起来,以便我们仍然可以提取其参数用于 \connect 尝试。(这行得通,因为 PQconninfo 不关心 PGconn 是否处于 CONNECTION_BAD 状态。)这允许开发人员在数据库崩溃和重启后仅使用 \c 重新连接。尝试使用相同的方法而不是在失败的非交互式 \connect 命令后关闭旧连接。然而,这并不那么安全:考虑一个包含 \c db1 user1 live_server \c db2 user2 dead_server \c db3 的脚本。脚本将期望连接到 dead_server 上的 db3,但如果我们重用第一个连接的参数,它可能会成功连接到 live_server 上的 db3。这会违背不让脚本意外地在错误数据库上执行命令的目标。讨论:https://postgr.es/m/38464.1603394584@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/1b62d0fb3e50ede570d0d4e4a2be69d5645b48a7
修复新的 amcheck 代码中的更多可移植性问题。verify_heapam() 在使用它们之前没有仔细检查元组行指针,这会导致在对齐敏感的体系结构上出现 SIGBUS。修复该问题,添加更多测试覆盖。Mark Dilger,我做了一些小的修改 讨论:https://postgr.es/m/30B8E99A-2D9C-48D4-A55C-741C9D5F1563@enterprisedb.com https://git.postgresql.org/pg/commitdiff/321633e17b07968e68ca5341429e2c8bbf15c331
修复 ecpg 的 pthread_once() 在 Windows 上的仿真中的古老 bug。我们必须在执行初始化函数后才能设置“done”标志。否则,其他线程可能会在初始化实际完成之前通过未锁定的测试。这已被观察到导致 ecpg 的线程/描述符测试偶尔失败,并且可能导致使用线程的 ECPG 应用程序出现其他类型的误行为,因为 ecpglib 在多个地方依赖 pthread_once()。由我诊断和打补丁,基于 Alexander Lakhin 的研究。回溯到所有支持的分支(此 bug 可追溯到 2007 年)。讨论:https://postgr.es/m/16685-d6cd241872c101d3@postgresql.org https://git.postgresql.org/pg/commitdiff/21d36747d4fafe16539a0c55ebb91a01e4053e3c
修复 BEFORE ROW UPDATE 触发器返回 OLD 的角落情况。如果旧行具有任何“缺失”属性,这些属性本应从关联的元组描述符中检索,那么就会发生错误,因为触发器结果直接被推送到缺乏缺失属性数据的执行器槽中。特别是,CHECK 约束验证将错误地将这些列视为 NULL,RETURNING 列表评估也是如此。通过强制在将元组传递给触发器函数之前展开元组来打补丁。(我认为将缺失属性数据放入元组约束是一个根本性的错误设计,因为系统的很大一部分将其视为可选。但我们现在可能被卡住了,并且必须继续应用其他地方类似的补丁。)回溯到 v12。v11 也会有问题,除非 commit 920311ab1 已经应用了类似的补丁。虽然它比看起来真正需要的情况更广泛地强制展开,但这并不是一个直接等效的修复。Amit Langote,由我进行了一些化妆品修改 讨论:https://postgr.es/m/16644-5da7ef98a7ac4545@postgresql.org https://git.postgresql.org/pg/commitdiff/ba9f18abd3650e385e9a35df7145a7c38af17e92
在 INSERT/UPDATE 中,使用表的真实元组描述符作为目标。以前,ExecInitModifyTable 依赖于 ExecInitJunkFilter,进而依赖于 ExecCleanTypeFromTL,从查询 tlist 构建目标描述符。虽然我们刚刚在 ExecCheckPlanOutput 中检查了 tlist 是否产生兼容的输出,但这并不是关系实际元组描述符(可从 relcache 获取)的很好替代。一方面,删除的列不会被正确标记为 attisdropped;令人惊讶的是,我们对此已经这样做了很长时间。但真正需要担心的是,使用表的描述符意味着槽将具有正确的 attrmissing 数据,从而允许我们撤销 commit ba9f18abd 的笨拙修复。(此提交撤销了 trigger.c 中该提交的更改,但保留了新的测试用例。)因此,我们可以用更少的周期而不是更多的周期来解决错误的触发器元组问题。不回溯,因为这并没有修复任何额外的 bug,并且与 ba9f18abd 的狭窄修复相比,它可能带来 unforeseen 的副作用的可能性更大。讨论:https://postgr.es/m/16644-5da7ef98a7ac4545@postgresql.org https://git.postgresql.org/pg/commitdiff/20d3fe9009ddbbbb3da3a2da298f922054b43f8c
doc: 改进关于如何使用我们的代码覆盖率基础设施的解释。引用在子目录中运行“make coverage”的说法有点模糊,因此请澄清执行此操作时会发生什么。也做一些零散的文字编辑。根据 Peter Smith 的问题。讨论:https://postgr.es/m/CAHut+Pu0r3AjRSyu5E0v2-zRj8r24OSrkWs3fEBxOuaw1i8DKA@mail.gmail.com 作者:Daniel Westermann 和我 后向移植到:9.6 https://git.postgresql.org/pg/commitdiff/8d132b2850d4c95ed5666a09b295dea645bbc884
在存在常量的情况下修复外键选择性估计。get_foreign_key_join_selectivity() 查找将 FK 约束的两侧相等的 join 子句。然而,如果我们有一个查询,比如“WHERE fktab.a = pktab.a and fktab.a = 1”,它找不到这样的 join 子句,因为 equivclass.c 将给定子句替换为“fktab.a = 1 and pktab.a = 1”,这可以在扫描级别强制执行,在 join 级别没有什么可以对列“a”做。我们可以轻松地修复这个预期,但然后出现了一个新问题:应用基于外键的选择性规则会产生行数低估,因为我们实际上在双重计算“fktab.a = 1”子句的选择性。因此,我们必须从估计中取消这种选择性。为了修复,重构 process_implied_equality(),使其能够将新的 RestrictInfo 返回给 equivclass.c 中的调用者,允许生成的“fktab.a = 1”子句保存在 EquivalenceClass 的 ec_derives 列表中。然后,当我们发现有必要调整 FK 选择性估计时,很容易提取相关的 RestrictInfo。(同时,我们还可以删除 initialize_mergeclause_eclasses() 的昂贵使用来设置新的 RestrictInfo 的 left_ec 和 right_ec 指针。equivclass.c 代码基本上可以免费设置这些。)这似乎显然是一个 bug 修复,但我犹豫是否要回溯它,首先因为它存在 API/ABI 风险(对于扩展),其次因为我们通常不愿在稳定分支中破坏计划选择。根据 Sigrid Ehrenreich 的报告。讨论:https://postgr.es/m/1019549.1603770457@sss.pgh.pa.us 讨论:https://postgr.es/m/AM6PR02MB5287A0ADD936C1FA80973E72AB190@AM6PR02MB5287.eurprd02.prod.outlook.com https://git.postgresql.org/pg/commitdiff/ad1c36b0709e47cdb3cc4abd6c939fe64279b63f
不要在 pg_proc.dat 中使用自定义 OID 符号。我们已经有了一个用于内置函数 OID 宏的完美约定,因此创建自定义符号只是引入了不必要的偏离约定。删除已悄悄进入的一个示例,并在 genbki.pl 中添加一个错误检查以阻止将来出现类似情况。尽管这会影响 pg_proc.dat,但由于实际的目录数据未更改,因此无需提高 catversion。John Naylor 讨论:https://postgr.es/m/CAFBsxsHpCbjfoddNGpnnnY5pHwckWfiYkMYSF74PmP1su0+ZOw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/36b93121436cbbf357974144068c23bac75154fa
在查询重写器中计算 extraUpdatedCols,而不是在解析器中。在解析时执行此操作不安全,因为向表添加生成的列不会使包含该表 UPDATE 的已存储规则失效……但现在可能存在规则创建时不存在的依赖生成的列。这还修复了 rewriteTargetView 在转换可更新视图上的 UPDATE 时未能更新 extraUpdatedCols 的疏忽。(由于新的计算是在其下游进行的,rewriteTargetView 实际上不需要做任何事情;但在之前,那里有一个明显的问题。)在 v13 和 HEAD 中,这会导致容易看到的 bug,因为(自 commit c6679e4fc 以来)我们不会重新计算未列在 extraUpdatedCols 中的生成列。在 v12 中,这个位图主要用于触发器触发决策,所以只有当触发器关心是否更新了生成列时,您才会注意到问题。我曾抱怨过这件事,但直到 bug #16671(来自 Michael Paul Killian)重新提出这个问题,我才把它忘掉。回溯到 v12,这个字段是在那里引入的。如果现有的已存储规则包含任何 extraUpdatedCols 值,它们将被忽略,因为重写器会覆盖它们,所以即使对于现有规则,bug 也会得到修复。(但请注意,如果有人升级到 13.1 或 12.5,存储一些规则并在带有生成列的表上进行 UPDATE,然后降级到之前的次要版本,他们可能会遇到与此补丁修复的类似问题。这似乎不太可能,不值得花费大量精力来修复。)讨论:https://postgr.es/m/10206.1588964727@sss.pgh.pa.us 讨论:https://postgr.es/m/16671-2fa55851859fb166@postgresql.org https://git.postgresql.org/pg/commitdiff/ad77039fad0f4128b0e4a05ddbf5dbc3ab5f3fa4
在 psql 的 evaluate_backtick() 中,对 popen() 使用 "r" 模式。几乎所有其他地方,我们在 popen() 调用中使用纯粹的 "r" 或 "w" 模式(例外是用于 COPY 数据)。这一点被忽略了(可能是因为它隐藏在 ".l" flex 文件中?),但它使用的是 PG_BINARY_R。Kensuke Okamura 在 bug #16688 中抱怨,我们在删除反引号结果字符串的尾随换行符时未能剥离 \r。这是事实,但我们也未能干净地转换嵌入的 \r\n,这似乎也不理想。修复 popen() 模式似乎是处理此问题的最佳方法。它已经这样存在了很长时间,因此回溯到所有支持的分支。讨论:https://postgr.es/m/16688-c649c7b69cd7e6f8@postgresql.org https://git.postgresql.org/pg/commitdiff/66f8687a8ff867f656de81e367314604d29dbd59
doc: 清理 verify_heapam() 文档。我最初的目的是通过删除示例输出来抑制 PDF 构建警告,但最终做了更多工作:修正了函数签名的事实错误,将一些泛化的宽泛描述移到了“有效使用 amcheck”部分,似乎更适合放在那里,并改进了措辞和标记。讨论:https://postgr.es/m/732904.1603728748@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4c49d8fc15eeb1dc69b0ddb2d986a1884a5d7f5f
doc: 清理 pg_relation_check_pages() 文档。Commit f2b883969 没有接收到关于内置函数文档表新格式的消息。我注意到这是因为 PDF 构建警告了一个超宽的表。 https://git.postgresql.org/pg/commitdiff/b787d4ce6d910080065025bcd5f968544997271f
也不要在 pg_type.dat 中使用自定义 OID 符号。与 commit 36b931214 的理由相同,禁止在 pg_type 和 pg_proc 中使用自定义 oid_symbol 宏,以便我们始终依赖 genbki.pl 生成的可预测宏名称。我们确实继续授予 CASHOID 和 LSNOID 名称祖父地位,尽管这些现在被视为 MONEYOID 和 PG_LSNOID 首选名称的别名。这是因为很可能有客户端代码在使用旧名称,而这种洁癖似乎不值得破坏客户端代码。也许 EVTTRIGGEROID 也可以获得祖父地位,因为外部维护的 PL 可能引用该符号。但将其重命名为 EVENT_TRIGGEROID 似乎并不是一项艰巨的任务——我们在每次主版本发布时都会进行更重大的后端 API 更改。目前我没有添加它,但如果出现反对意见,我们可以重新考虑。这里更改的其他名称似乎不太可能有任何外部用途。同样,如果有人抱怨,我们可以添加别名宏,但目前我没有。与之前一样,不需要 catversion 升级。John Naylor 讨论:https://postgr.es/m/CAFBsxsHpCbjfoddNGpnnnY5pHwckWfiYkMYSF74PmP1su0+ZOw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f90149e6285aaae6b48559afce1bd638ee26c33e
跨 DST 转换稳定 timetz 测试。我在 commit a9632830b 中添加的 timetz 测试用例无意中对 PST8PDT 时区是否激活 DST 很敏感。因此,它们将在本周末开始失败,正如 Bernhard M. Wiedemann 在 bug #16689 中报告的那样。幸运的是,DST 意识对这些测试用例的目的并不重要,所以我们可以强制它们全部使用 PDT(DST 小时)以保持结果的稳定性。回溯到 v10,因为之前的补丁也是如此。讨论:https://postgr.es/m/16689-57701daa23b377bf@postgresql.org https://git.postgresql.org/pg/commitdiff/4a071afbd056282746a5bc9362e87f579a56402d
Doc: 澄清 pg_constraint.convalidated 的描述。Jimmy Angelakos 讨论:https://postgr.es/m/CABgVKCW_zPnvFXn24FTF0299_yU6+1p6JRUc0xpiZFWEXH1_jg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/b401fa206d446f224ec4760f21e0a351816c97b3
修复 check_new_partition_bound() 中的断言失败。Commit 6b2c4e59d 对 partition_range_bsearch() 返回的负 cmpval 结果过于自信。调整代码以应对这种情况。Amul Sul 的报告和补丁;我进行了一些额外的化妆品修改 讨论:https://postgr.es/m/CAAJ_b97WCO=EyVA7fKzc86kKfojHXLU04_zs7-7+yVzm=-1QkQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/970c05057593c2f5919a69b43fd917c4fa86f51c
如果错误结果缺少 SQLSTATE,则避免空指针解引用。虽然从后端接收到的错误结果应始终具有 SQLSTATE 字段,但 libpq 生成的错误结果不会,这使得代码在连接意外丢失后容易崩溃。Coverity 已注意到。Commit 403a3d91c 的疏忽。回溯到 9.5,因为它在此版本中。 https://git.postgresql.org/pg/commitdiff/7f4235032f0d75ea1ad29b192d57fee3d8fe533e
Álvaro Herrera 提交
讨论:https://postgr.es/m/20201016235925.GA29829@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/bbb927b4db9b3b449ccd0f76c1296de382a2f0c1
在 PostgresNode::backup() 中使用快速检查点。应该会使测试速度略有提升 https://git.postgresql.org/pg/commitdiff/831611b11c34ed0066633864f42ff67a10286aee
允许 LOCK TABLE 接受任何类型的关系。只允许表和视图通过 LOCK TABLE 锁定的限制非常武断,因为底层机制可以锁定任何关系类型。删除此限制,以便像 pg_dump 这样的程序可以锁定它们感兴趣的所有关系,从而防止可能导致转储在花费大量精力后失败的模式更改。回溯到 9.5。作者:Álvaro Herrera alvherre [AT] alvh.no-ip.org 评审者:Tom Lane tgl [AT] sss.pgh.pa.us 报告者:Wells Oliver wells.oliver [AT] gmail.com 讨论:https://postgr.es/m/20201021200659.GA32358@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/59ab4ac32460a6a93b665f4e487d7ff64979ba4d
pg_dump:锁定所有关系,而不仅仅是普通表。现在 LOCK TABLE 可以接受任何关系类型,在要转储的所有关系上获取锁。这可以防止模式更改或死锁错误,这些错误可能导致转储在花费大量精力后失败。服务器已测试表明具有此功能,如果不支持则会禁用该功能,因此打好补丁的 pg_dump 在连接到未打补丁的服务器时不会失败。回溯到 9.5。作者:Álvaro Herrera alvherre [AT] alvh.no-ip.org 评审者:Tom Lane tgl [AT] sss.pgh.pa.us 报告者:Wells Oliver wells.oliver [AT] gmail.com 讨论:https://postgr.es/m/20201021200659.GA32358@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/403a3d91c841beabf3efd7bffddb47a2bce4481f
Robert Haas 提交
将 amcheck 扩展到检查堆页面。Mark Dilger,由 Peter Geoghegan、Andres Freund、Álvaro Herrera、Michael Paquier、Amul Sul 和我评审。我进行了一些最后的化妆品修订。讨论:http://postgr.es/m/12ED3DA8-25F0-4B68-937D-D907CFBF08E7@enterprisedb.com https://git.postgresql.org/pg/commitdiff/866e24d47db1743dfcff5bd595b57e3a143f2cb1
尝试避免关于使用未初始化的 fxid 的编译器警告。Mark Dilger,我删除了几个多余的分号。讨论:http://postgr.es/m/2A7DA1A8-C4AA-43DF-A985-3CA52F4DC775@enterprisedb.com https://git.postgresql.org/pg/commitdiff/8bb0c9770e80fa79f15b27af8f3c3f2833225aa3
Bruce Momjian 已推送
doc: 使 blooms 文档与实际情况匹配。并行执行改变了 bloom 查询的执行方式,因此更新 EXPLAIN 输出,并重构文档使其更清晰、更准确。报告者:Daniel Westermann 讨论:https://postgr.es/m/ZR0P278MB0122119FAE78721A694C30C8D2340@ZR0P278MB0122.CHEP278.PROD.OUTLOOK.COM 作者:Daniel Westermann 和我 后向移植到:9.6 https://git.postgresql.org/pg/commitdiff/e9661f2b0f3310d8bacc3f0802b309f599300cfb
doc: 简化函数错误影响的措辞。报告者:bob.henkel@gmail.com 讨论:https://postgr.es/m/160324449781.693.8298142858847611071@wrigleys.postgresql.org 后向移植到:9.5 https://git.postgresql.org/pg/commitdiff/2f17fe431860fc434084d99d8b789e6ec7e6977b
docs: 删除对 src/tools/thread 的引用。此目录和独立构建 thread 测试程序的功能已在 commit 8a2121185b 中删除。报告者:e.indrupskaya@postgrespro.ru 讨论:https://postgr.es/m/160379609706.24746.7506163279454026608@wrigleys.postgresql.org 后向移植到:9.5 https://git.postgresql.org/pg/commitdiff/4066b642909176aede03b6c64d29734ce2a34716
Makefile 注释:删除对 tools/thread/thread_test 的引用。您不再可以单独编译 thread_test,并且其位置也已移动。报告者:Tom Lane 讨论:https://postgr.es/m/1062278.1603819969@sss.pgh.pa.us 后向移植到:9.5 https://git.postgresql.org/pg/commitdiff/8e5d1aef8eed26977739b662cddcea2de5efe834
Andres Freund 提交
集中临时表的生命周期确定,修复因倾斜导致的 bug。这修复了一个边缘情况下的 bug,即对于临时表,heap_page_prune() 可能与 heap_vacuum_rel() 产生不同的生命周期。这可能触发诸如“ERROR: cannot freeze committed xmax ...”之类的错误。该 bug 是由于 a7212be8b9e“Vacuuming temporary table时更积极地设置 cutoff xmin。”与 dc7420c2c92“snapshot scalability: Building snapshots时不要计算全局生命周期。”的交互造成的。问题源于 lazy_scan_heap() 假设 HeapTupleSatisfiesVacuum() 调用返回 HEAPTUPLE_DEAD 的唯一原因是因为元组是 HOT 元组,或者元组的插入事务自 heap_page_prune() 调用以来已中止。但在 a7212be8b9e 之后,对于临时表,由于 heap_page_prune() 在 dc7420c2c92 之后使用不同的可见性测试,也可能出现这种情况。修复方法很简单:将 vacuum_set_xid_limits() 中针对临时表的特殊情况逻辑移至 dc7420c2c92 中引入的基础设施。这确保了用于修剪的生命周期至少与 lazy_scan_heap() 使用的生命周期一样积极。临时表的具体生命周期略有不同于 dc7420c2c92 中的逻辑,但应始终像以前一样积极(请参阅注释)。将逻辑集中在 procarray.c 的一个显著好处是,现在临时表更积极的生命周期不仅适用于 VACUUM,也适用于例如 HOT 修剪和 nbtree killtuples 逻辑。由于 vacuum_set_xid_limits() 不再需要 isTopLevel,因此我撤销了 a7212be8b9e 中相关的更改。此提交还添加了一个隔离测试,确保临时表更积极的 vacuuming 和 pruning 能够继续正常工作。Debugged-By: Amit Kapila amit.kapila16 [AT] gmail.com Debugged-By: Tom Lane tgl [AT] sss.pgh.pa.us Debugged-By: Ashutosh Sharma ashu.coek88 [AT] gmail.com Author: Andres Freund andres [AT] anarazel.de Discussion: https://postgr.es/m/20201014203103.72oke6hqywcyhx7s@alap3.anarazel.de Discussion: https://postgr.es/m/20201015083735.derdzysdtqdvxshp@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/94bc27b57680b4e757577e3f5b65dc32f96d33c1
修复后端启动期间错误的普通表生命周期计算。当在 MyDatabaseOid 设置之前调用 ComputeXidHorizons() 时,例如,在 InitPostgres() 期间遇到共享关系中的死行,普通表的生命周期被计算得过于积极,忽略了连接到某个数据库的所有后端。在随后的普通表修剪期间,可能仍会使用过于积极的生命周期,可能导致仍需要的元组被删除。这不好。这是 dc7420c2c92 中的一个 bug,94bc27b5768 中添加的测试使其可见,如果使用 force_parallel_mode 设置为 regress 运行。在这种情况下,bug 会被可靠地触发,因为“pruning_query”在并行工作进程中运行,并且该并行工作进程的启动很可能在 pg_database 中遇到死行。修复很简单:如果 MyDatabaseId 尚不为人知,则计算一个更保守的普通表生命周期。Author: Andres Freund Discussion: https://postgr.es/m/20201029040030.p4osrmaywhqaesd4@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/1c7675a7a4265064a2c8e1ed02b2c042c2521664
Noah Misch 推送
重现并行工作进程中 debug_query_string\=\=NULL 的情况。某些后台工作进程在 debug_query_string\=\=NULL 时发起并行查询,此时它们尝试 strlen(NULL) 并因 SIGSEGV 而崩溃。旧的 debug_query_string 观察者允许 NULL,因此在新观察者中也这样做。向 v11 反向移植,其中 commit 7de4a1bcc56f494acbd0d6e70781df877dc8ecb5 引入了第一个。Discussion: https://postgr.es/m/20201014022636.GA1962668@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/f90e80b9138355a51d2d5b5b63e1f89c4ba53325
在 worker_spi 中设置 debug_query_string。这使得 elog.c 发出该字符串,这对于执行 SQL 字符串的后台工作进程来说是很好的做法。Reviewed by Tom Lane。Discussion: https://postgr.es/m/20201014022636.GA1962668@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/d2246cde825e4e1a85408390c66367b85b51a233
Peter Eisentraut 发送了一个补丁,添加了一个 default_result_formats GUC,它为扩展查询协议中返回的行指定了数据类型的默认结果格式,当 Bind 消息中未指定结果格式时。
Álvaro Herrera 发送了另一个补丁修订版,用于向 libpq 添加跟踪。
Julien Rouhaud 发送了两个补丁修订版,用于处理 pg_trgm 中的 = 运算符。
Álvaro Herrera 发送了另一个补丁修订版,用于向 libpq 添加批处理和流水线支持。
Craig Ringer 发送了一个补丁,用于报告 libpq 版本和配置。
Jakub Wartak 发送了两个补丁修订版,用于向 autoanalyze 添加“IO read time”日志消息。
Alexander Korotkov 和 Andrey Borodin 交换了补丁,使用共享锁而不是独占控制锁,在 GetMultiXactIdMembers 中用于偏移量和成员,使 MultiXact 本地缓存大小可配置,添加一个条件变量以在边角情况下等待下一个 MultXact 偏移量,并添加 GUCs 来调整 MultiXact SLRUs。
Pavel Borisov 发送了另一个补丁修订版,通过允许重新排序列来提高 GROUP BY 的效率。
Peter Geoghegan 发送了另一个补丁修订版,添加了 sort_template.h 以创建快速排序函数,并向 nbtree 添加了删除去重。
Michaël Paquier 发送了另一个补丁修订版,用于修复基准备份中的校验和验证,针对零页头。
Ajin Cherian 和 Peter Smith 交换了补丁,为两阶段事务实现了逻辑解码。
Zhenghua Lyu 发送了一个补丁,用于在 get_variable_numdistinct 中考虑 stanullfrac 为 1.0 的情况。
Konstantin Knizhnik 发送了另外五个补丁修订版,用于在 libpq 中实现压缩。
Justin Pryzby 发送了一个补丁,用于删除已弃用的 v8.2 containment 运算符。
Peter Eisentraut 发送了另一个补丁修订版,以支持为语言 SQL 编写 CREATE FUNCTION 和 CREATE PROCEDURE 语句,其函数体符合 SQL 标准,并且可以移植到其他实现。
Ibrar Ahmed 发送了另一个补丁修订版,用于实现时间 PK/FK 删除和更新。
Justin Pryzby 发送了另一个补丁修订版,用于 pg_dump 输出 DISABLE/ENABLE 子触发器,如果其状态与其父级不匹配。
Arseny Sher 发送了一个补丁,用于修复一次使用后释放(use-after-free)。
Amit Kapila 发送了一个补丁,用于改进 pg_stat_replication_slots 视图中溢出的计数器描述。
Dilip Kumar 发送了另外三个补丁修订版,用于实现表的自定义压缩方法以及更改相同的方法。
John Naylor 发送了两个补丁修订版,用于使用标准符号来表示内置函数 heap_tableam_handler()。
Michaël Paquier 发送了另一个补丁修订版,用于在后端启用在线校验和验证。
Greg Nancarrow 发送了另外两个补丁修订版,用于在安全的情况下启用“INSERT INTO ... SELECT ...”的并行 SELECT,以及在安全的情况下启用“INSERT INTO ... SELECT ...”的并行 INSERT 和/或 SELECT。
Masahiko Sawada 和 Bertrand Drouvot 交换了补丁,用于记录备用恢复冲突等待。
Vigneshwaran C 发送了另一个补丁修订版,用于并行化 COPY 的部分。
Daniel Gustafsson 发送了另外四个补丁修订版,用于支持 NSS 作为 libpq TLS 后端。
Michaël Paquier、Fabrízio de Royes Mello 和 Nikolay Samokhvalov 交换了补丁,为创建表达式索引后添加有关 ANALYZE 的重要信息。
Justin Pryzby 发送了一个补丁,用于实现分区表的 CLUSTER,为已聚类的分区索引的子节点保留 indisclustered,并在附加未聚类的索引时使 indisclustered 无效。
Justin Pryzby 发送了一个 WIP 补丁,用于为分区索引实现 DROP INDEX CONCURRENTLY。
Hayato Kuroda 发送了一个补丁,用于修复 pgbench 中的一个问题,该问题是查询在连接建立之前就已触发,通过添加对 pthread_barrier_wait() 的调用。
Hou Zhijie 发送了一个补丁,用于增强 libpq,以支持非热备用状态下的多个主机。
Pavel Borisov 发送了一个补丁,用于修复在 OSX 上运行 Valgrind 时的 bug。
Amul Sul 发送了另一个补丁修订版,用于实现 ALTER SYSTEM READ {ONLY|WRITE}。
Justin Pryzby 发送了另一个补丁修订版,用于确保所有 pg_ls_* 函数都显示目录和共享文件集。
Tsutomu Yamada 发送了四个修订版,用于在 psql 的 \dX 和 \dX+ 中添加列表扩展统计信息。
Kirk Jamison 发送了另一个补丁修订版,用于使用 dlist 使删除关系缓冲区更有效。
Bruce Momjian 发送了另外两个补丁修订版,用于实现一个密钥管理系统。
Xiao Bai Yan 发送了另一个补丁修订版,用于扩展共享元组存储并添加批处理存储模块,并在此过程中,在获取下一个读取页面时,使用原子操作而不是 LWLock 来处理共享元组存储,并利用此实现使用批处理哈希聚合的并行 distinct union 聚合和 grouping sets 支持。
Amit Kapila 发送了另一个补丁修订版,用于跟踪从 ReorderBuffer 流式传输更改的统计信息。
John Naylor 发送了一个补丁,用于禁止自定义 pg 类型符号。
Heikki Linnakangas 和 Andres Freund 交换了补丁,用于在规划器中去重聚合函数和转换函数。
Amit Langote 发送了另一个补丁修订版,用于在 nodeModifyTable.c 中重新安排分区路由层。
Takamichi Osumi 使其能够禁用 WAL 日志记录以加快数据加载速度。
John Naylor 发送了四个修订版,用于记录 pg_settings 视图不显示自定义选项的事实。
Bharath Rupireddy 发送了另外两个补丁修订版,添加了两个新函数:pg_terminate_backend(pid, wait, timeout),该函数终止指定后端并等待或超时;以及 pg_wait_backend(pid, timeout),该函数检查具有给定 PID 的后端是否存在,并等待或超时直到其消失。
Euler Taveira de Oliveira 发送了一个补丁,用于控制崩溃后临时文件的删除。
Vigneshwaran C 发送了四个修订版,用于向日志消息添加 GSS 身份验证、加密和主体信息。
Noah Misch 发送了另一个补丁修订版,用于防止过度的 SimpleLruTruncate() 删除,并在 SimpleLruTruncate() 中减少 unlinking,以防范 bug。
Takamichi Osumi 发送了另一个补丁修订版,用于实现 CREATE OR REPLACE TRIGGER。
Justin Pryzby 发送了另一个补丁修订版,用于 pg_dump:允许子分区独立恢复,即使父分区不存在,或者缺少/不兼容的列。
Justin Pryzby 发送了一个补丁,用于淘汰 pg_standby 和 pg_archivecleanup。
Masahiko Sawada 发送了一个 PoC 补丁,该补丁添加了一些 xx_vacuum GUC 参数来控制记录 TID 的方法。
Michaël Paquier 发送了另一个补丁修订版,用于修复基准备份中的页面验证。
Masahiro Ikeda 发送了另一个补丁修订版,用于向 pg_stat_wal 视图添加统计信息。
Justin Pryzby 发送了另一个补丁修订版,允许 INSERT SELECT 使用 BulkInsertState,并使用相同的机制使 INSERT SELECT 使用 multi_insert。
Daniel Gustafsson 发送了另一个补丁修订版,用于清理 contrib/sslinfo 和 OpenSSL 错误处理。
Amit Langote 发送了另一个补丁修订版,以提高继承树的更新/删除性能。
Tomáš Vondra 和 James Coleman 交换了补丁,用于修复 join 下 volatile 表达式的 get_useful_pathkeys_for_relation,并添加注释解释何处不需要投影。
Thomas Munro 发送了另外两个补丁修订版,用于实现排序版本控制。
Amit Langote 发送了另一个补丁修订版,从 ExecInitModifyTable 调用 BeginDirectModify,并延迟初始化结果关系信息。
Amit Langote 发送了另一个补丁修订版,用于修复 UPDATE 移动元组时 RETURNING 的 bug。
Ashutosh Bapat 发送了另外两个补丁修订版,用于将逻辑复制消息操作枚举化。
Jimmy Angelakos 发送了一个补丁,用于澄清 pg_constraint 中 convalidated 的措辞。
John Naylor 发送了一个补丁,用于记录 REVOKE ROLE 与标准偏离的事实。
Andrey Borodin 提交了一个为 gist_btree 类型添加 GiST 构建排序支持的补丁。
Tomáš Vondra 发送了另一个补丁修订版,用于扩展范围类型运算符以处理元素。
Heikki Linnakangas 发送了一个 WIP 补丁,用于在 COPY 中分块查找所有行结束符。
Jürgen Purtz、Erik Rijkers 和 Justin Pryzby 交换了补丁,为教程添加了一个新章节。
Tomáš Vondra 发送了另一个补丁修订版,为 Nested Loop 的 explain 添加了额外的统计信息。
Justin Pryzby 发送了另一个补丁修订版,用于修复拼写错误。
Justin Pryzby 发送了另一个补丁修订版,用于允许对分区表创建索引(CREATE INDEX CONCURRENTLY),为更多集成添加 SKIPVALID 标志,并使 eindexPartitions() 设置 indisvalid。
Andrey V. Lepikhov 发送了另一个版本的补丁,用于删除不必要的自连接。
Ranier Vilela 发送了一个补丁,用于修复 src/backend/storage/ipc/latch.c 中解引用之前存在 NULL 检查的 bug。
Ranier Vilela 发送了一个补丁,用于修复 src/backend/utils/adt/ruleutils.c 中显式的 NULL 解引用。
Justin Pryzby 发送了另一个补丁修订版,允许 CLUSTER、VACUUM FULL 和 REINDEX 动态更改表空间。
Tom Lane 发送了一个补丁,添加了一个新的 CoercionForm 变体 COERCE_SQL_SYNTAX。
Greg Sabino Mullane 发送了另一个补丁修订版,以帮助 psql 的 \df 根据参数选择函数。
Tom Lane 发送了一个补丁,让 Gen_fmgrtab.pl 为所有 pg_proc 条目生成宏。
Tom Lane 发送了一个补丁,用于移除 aggregate_dummy()。