2025年9月25日: PostgreSQL 18 发布!

PostgreSQL 每周新闻 - 2020 年 11 月 1 日

发布于 2020-11-02,作者:PWN
PWN

PostgreSQL 每周新闻 - 2020 年 11 月 1 日

PostgreSQL 14 的下一个 Commitfest 已开始。如果您是补丁的作者,请务必跟进评审,以便您的贡献能够准备好被提交。

PostgreSQL 产品新闻

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

PostgreSQL 相关新闻

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 提交

Peter Eisentraut 提交

Heikki Linnakangas 提交

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 提交

Robert Haas 提交

Bruce Momjian 已推送

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

待处理补丁

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()。