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

由 PWN 于 2020-11-02 发布
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 之前(PST8PDT)将新闻和公告提交至 david@fetter.org

应用的补丁

David Rowley 推送

  • 防止关系中过大和 NaN 行估计。给定一个具有足够连接的查询,查询计划器在将行估计值与连接选择性相乘后,估计的行数可能会超出双精度数据类型的限制并变为无穷大。为了指示需要多极端的案例才能命中这种情况,报告的特定示例案例需要 379 个连接到一个没有任何统计信息的表,这导致 1.0/DEFAULT_NUM_DISTINCT 用于连接选择性。这最终导致行估计变为无穷大,并导致 initial_cost_mergejoin() 中出现断言失败,其中无穷大行估计值乘以 0.0 的 outerstartsel,导致 NaN。失败的断言验证了 NaN <= Inf,这是错误的。为了解决这个问题,我们使用 clamp_row_est() 将行估计值上限为 1e100。这个值被认为足够低,由此产生的成本将保持在双精度类型可以表示的范围内。除了修复失败的断言之外,这也带来了一个额外的好处,即使得 add_path() 仍然可以接收正确的数值作为成本,这使得它可以在极端情况下(例如上面描述的情况)确定更便宜的路径时做出更明智的选择。此外,我们还摆脱了连接成本函数中的 isnan() 检查。最初触发添加这些检查的实际情况从未进入邮件列表。看起来添加到 clamp_row_est() 的新代码将导致那些检查变得冗余,因此只需删除它们。相当无害的断言失败问题也存在于 backbranch 中,但是,将在那里应用更精简的修复。报告人: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() 来从列表中删除一些元素。在许多这些地方,我们知道,或者只需付出很小的额外努力就可以知道我们需要删除的 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 中,当使用 OpenSSL 0.9.6 或更旧版本构建树时,现有代码使用 EVP_MD_CTX_destroy() 和 EVP_MD_CTX_create() 而没有等效的实现,这意味着自 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}decomposition 的性能。这用两个完美的哈希函数替换了后端代码中用于组合和分解的现有二进制搜索,但代价是后端代码的二进制文件稍大(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}decomposition 代码的问题。genhtml 使用此新代码生成以下警告:警告:/path/src/common/unicode_norm.c:102 处的函数数据不匹配 HTML 覆盖率报告关心源文件中定义的函数的唯一性,忽略任何关于 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-e05c7d2b0cbd@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() 来检查关系(relation)的磁盘页面。它利用了 c780a7a 中引入的 CheckBuffer(),添加了一个 SQL 包装器,能够对关系的所有页面进行检查。默认情况下,会检查关系的所有 fork 类型,也可以只检查给定的关系 fork。请注意,如果输入的 relation 没有物理存储或为临时关系,则不会生成错误,从而可以在与简单的 pg_class 扫描结合使用时进行全数据库检查。这不仅限于启用数据校验和的集群,因为没有数据校验和的集群仍然可以使用页面头或对于充满零的页面进行检查。此函数返回一组元组,其中包括: - 检测到损坏页面的物理文件(不带段号,因为段号可能取决于访问方法(AM),对于堆表,可以从块号中推断出来)。使用相对于 PGPATH 的相对路径。- 损坏页面的块号。默认情况下,只有超级用户才能访问此函数,但可以向其他用户授予执行权限。此处引入的功能仍然是最低限度的,可以进行更多改进,例如: - 添加开始和结束块号以对一系列块运行检查,这仅在检查一种 fork 类型时适用。- 添加一些进度报告。

  • 节流,在函数输入中配置参数,或可能使用一些基于成本的 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 函数结果强制转换的列表操作错误。自从提交 913bbd88d 以来,check_sql_fn_retval() 可以在生成 SQL 函数结果的查询中内联插入类型强制转换步骤,或者在就地修改查询的输出不安全时,生成新的顶层查询来执行强制转换。但是,似乎后一种情况从未真正起作用,因为代码尝试将新查询注入回传递给它的查询列表...当我们在“正常”执行 SQL 函数(不进行内联)时,这不是将用于后续处理的列表。因此,我们最终在运行时没有发生强制转换,从而导致错误的结果或崩溃,具体取决于涉及的数据类型。虽然回归测试看起来足以涵盖这个领域,但由于运气不好,所有执行单独查询路径的测试用例都在检查内联的情况(碰巧没有错误)或运行时是空操作的情况(例如,varchar 到 text),因此无法明显看出强制转换的失败。v13 之前根本不允许使用不起作用的案例这一事实可能也导致没有更早地注意到这个问题。要进行修复,请删除单独的 “平面” 查询节点列表,而是传递稍后将要使用的实际两级列表。我选择在 check_sql_fn_statements() 中进行相同的更改,尽管它没有实际的错误,只是这样我们就不再需要该数据结构了。这是一个 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 参数替换为目标数据库的名称来重新连接。如果该参数是连接字符串(长期以来一直允许,尽管我们在此补丁之前未能记录),我们将丢失它可能指定的任何其他选项,例如 SSL 或 GSS 参数,可能导致连接失败。因此,这与提交 a45bc8a4f 在 pg_dump 和 pg_restore 中修复的错误相同。我们可以用相同的方式修复它,即使用 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 声称能够重用之前的连接参数,但实际上它只重用数据库名称、用户名、主机名(以及可能的主机地址,取决于版本)和端口。这对于各种用例都是有问题的。值得注意的是,pg_dump[all] 发出 "\connect databasename" 命令,我们希望这些命令重用所有其他参数。如果这样一个脚本加载到最初带有 "-d connstring" 和一些非默认参数的 psql 运行中,那么这些其他参数将会丢失,可能导致连接失败。(因此,这与提交 a45bc8a4f 和 8e5793ab6 中解决的错误类型相同,尽管细节大不相同。)为了解决这个问题,重新设计 do_connect(),使其使用 PQconninfo() 提取旧 PGconn 的所有属性,然后在该数组中替换单个属性。如果我们不希望重用任何东西,则使用 PQconndefaults() 获取 libpq 的默认设置,并替换其中的条目,这样我们就无需为这两种情况使用不同的代码路径。这确实会导致另一种行为更改,即在原始连接参数允许多个主机的情况下,例如 "psql -h host1,host2",并且 \connect 请求允许重用主机设置。由于之前的编码依赖于 PQhost(),因此它仅允许重新连接到最初选择的同一主机。虽然人们可以想到这种情况是好事,但也有一些情况不是。此外,这种行为似乎不符合最少惊讶原则,也没有记录;甚至不清楚是否有意为之,因为这种编码早于 libpq 中多主机支持的添加。因此,此补丁满足于放弃它并按给定方式重用主机列表。根据 Peter Eisentraut 在 bug #16604 上的评论。向所有受支持的分支进行反向移植。讨论:https://postgr.es/m/16604-933f4b8791227b15@postgresql.org https://git.postgresql.org/pg/commitdiff/85c54287af56fe351b53913ea2b81e9d6145f964

  • 清理 psql 的 \connect 命令中的一些令人不快的行为。检查是否应该抱怨没有旧连接来获取参数的检查严重过时:当我们发明连接字符串或发明 -reuse-previous 选项时,它都没有被重新考虑。将其替换为检查,如果 reuse-previous 处于活动状态并且我们没有要重用的旧连接,则抛出错误。虽然这在缓解服务器崩溃后重新连接方面没有多大进展,但至少它是一致的。如果用户指定了一个连接字符串加上额外的参数(根据文档,这是无效的),则额外的参数会被静默忽略。这似乎会让人非常困惑,所以让我们改为抛出语法错误。教导连接字符串代码路径在与旧式语法代码路径相同的案例中重用旧连接的密码,即如果我们正在重用参数并且用户名、主机/主机地址和端口的值没有被更改。记录此行为,因为它之前未提及。此外,稍微简化实现,从而产生两个新的有用属性:如果连接字符串中有“password=xxx”,我们将使用它而不是忽略它,并且默认情况下(即,除了使用 --no-password 外),如果重用的密码或连接字符串密码不起作用,我们将提示输入密码。如果重用的密码不起作用,则之前的代码会直接失败。考虑到对这些问题的投诉很少,我不认为它们会上升到需要反向移植的错误修复的级别,而且在任何情况下,它们都可能代表次要版本中不希望出现的行为更改。因此,不进行反向移植。讨论: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 标识符,其中反斜杠不是特殊的,因此 \" 会结束字面值。我研究了使其按照文档描述的方式工作,但让词法分析器在正确的时间点切换行为是非常困难甚至是不可能的。这真的不值得麻烦,因为这些情况几乎没有用处:如果你有一个要执行或准备的固定 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",这对于带引号的标识符来说是错误的语法。原因是词法分析器认为它应该只输出一个引号,而它真正应该做的是保持字符串原样。也添加一些文档和测试用例。虽然这显然是一个错误,但我担心用户不会喜欢在次要版本中更改它。有些人很可能通过对受影响的引号应用额外的双倍来解决这个问题,例如 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 版本 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 测试中的可移植性问题。由于没有注意字节序的考虑,提交 866e24d47 添加的测试在大端机器上失败。修复此问题。在此过程中,改进一些小的表面问题,例如通过 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 中用于 Windows 的 pthread_once() 模拟的古老错误。我们必须在执行完初始化函数之后才能设置 “done” 标志。否则,其他线程可以在初始化真正完成之前通过初始解锁测试。已经发现这会导致 ecpg 的线程/描述符测试出现罕见的失败,并且可能在使用了 ecpg 的多线程应用程序中导致其他类型的错误行为,因为 ecpglib 在多个地方依赖 pthread_once()。由我诊断和修补,基于 Alexander Lakhin 的调查。反向移植到所有支持的分支(该错误可以追溯到 2007 年)。讨论:https://postgr.es/m/16685-d6cd241872c101d3@postgresql.org https://git.postgresql.org/pg/commitdiff/21d36747d4fafe16539a0c55ebb91a01e4053e3c

  • 修复了返回 OLD 的 BEFORE ROW UPDATE 触发器的边缘情况。如果旧行有任何应该从关联的元组描述符中检索的“缺失”属性,则会发生错误,因为触发器结果直接被塞入一个缺少缺失属性数据的执行器槽中。值得注意的是,CHECK 约束验证会错误地将这些列视为 NULL,并且 RETURNING 列表的计算也会如此。通过在将元组传递给触发器函数之前强制展开元组来解决此问题。(我认为将缺失的属性数据放入元组约束中是一个根本性的设计错误,系统的很多部分都认为这是可选的。但我们现在可能已经陷入了这种困境,并且必须继续应用临时解决方案,因为我们会发现其他具有类似问题的地方。)反向移植到 v12。v11 也存在此问题,只是提交 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 数据,从而允许我们还原提交 ba9f18abd 的临时修复。(此提交撤消了该提交在 trigger.c 中的更改,但保留了新的测试用例。)因此,我们可以用更少的周期而不是更多周期来解决错误的触发器元组问题。不进行反向移植,因为这没有修复任何其他错误,并且它似乎比 ba9f18abd 的狭义修复更有可能产生不可预见的副作用。讨论:https://postgr.es/m/16644-5da7ef98a7ac4545@postgresql.org https://git.postgresql.org/pg/commitdiff/20d3fe9009ddbbbb3da3a2da298f922054b43f8c

  • 文档:改进如何使用我们的代码覆盖率基础设施的解释。在子目录中运行“make coverage”的引用有点模糊,因此请澄清执行此操作时会发生什么。也做一些零星的复制编辑。根据 Peter Smith 的问题。讨论:https://postgr.es/m/CAHut+Pu0r3AjRSyu5E0v2-zRj8r24OSrkWs3fEBxOuaw1i8DKA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8d132b2850d4c95ed5666a09b295dea645bbc884

  • 修复了在存在常量的情况下,外键选择性估计的问题。get_foreign_key_join_selectivity() 查找使 FK 约束两边相等的连接子句。但是,如果我们的查询类似于 “WHERE fktab.a = pktab.a and fktab.a = 1”,它将找不到任何此类连接子句,因为 equivclass.c 将给定的子句替换为 “fktab.a = 1 and pktab.a = 1”,这可以在扫描级别强制执行,而无需在连接级别对列 “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 代码可以基本上免费设置这些指针。)这似乎显然是一个错误修复,但我犹豫是否要反向移植它,首先是因为扩展存在一些 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 的存储规则失效...但是现在可能存在在创建规则时不存在的依赖的生成的列。这还修复了一个疏忽,即当转换可更新视图的 UPDATE 时,rewriteTargetView 未能更新 extraUpdatedCols。(由于新的计算是在该计算的下游,因此 rewriteTargetView 实际上不需要执行任何操作;但是以前,那里存在一个明显的错误。)在 v13 和 HEAD 中,这会导致容易看到的错误,因为(自从提交 c6679e4fc 以来)我们将不会重新计算未在 extraUpdatedCols 中列出的生成的列。在 v12 中,此位图主要用于触发器触发决策,因此仅当触发器关心生成的列是否已更新时,您才会注意到问题。我早在 5 月份就抱怨过这一点,但后来忘记了,直到 Michael Paul Killian 的错误 #16671 再次引发了这个问题。反向移植到 v12,在该版本中引入了此字段。如果现有存储的规则包含任何 extraUpdatedCols 值,则这些值将被忽略,因为重写器将覆盖它们,因此即使对于现有规则,该错误也将得到修复。(但请注意,如果有人更新到 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 在错误 #16688 中抱怨说,我们在从反引号结果字符串中删除尾随换行符时未能删除 \r。这是事实,但我们也无法干净地转换嵌入的 \r\n,这也似乎是不希望的。修复 popen() 模式似乎是解决此问题的最佳方法。这种情况已经存在很长时间了,因此请反向移植到所有受支持的分支。讨论:https://postgr.es/m/16688-c649c7b69cd7e6f8@postgresql.org https://git.postgresql.org/pg/commitdiff/66f8687a8ff867f656de81e367314604d29dbd59

  • 文档:清理 verify_heapam() 文档。我最初只是想通过删除示例输出来抑制 PDF 构建警告,但最终做了更多:更正函数签名中的事实错误,将大量泛化的空谈移到“有效使用 amcheck”部分,这似乎更适合,并稍微改进了措辞和标记。讨论:https://postgr.es/m/732904.1603728748@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/4c49d8fc15eeb1dc69b0ddb2d986a1884a5d7f5f

  • 文档:清理 pg_relation_check_pages() 文档。提交 f2b883969 没有收到有关内置函数文档的新表格格式样式的通知。我注意到是因为 PDF 构建警告中出现了一个超宽表。https://git.postgresql.org/pg/commitdiff/b787d4ce6d910080065025bcd5f968544997271f

  • 也不要在 pg_type.dat 中使用自定义 OID 符号。与提交 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 测试。我在提交 a9632830b 中添加的 timetz 测试用例无意中对 PST8PDT 时区中是否激活 DST 敏感。因此,正如 Bernhard M. Wiedemann 在错误 #16689 中报告的那样,它们将在下周末开始失败。幸运的是,DST 感知对这些测试用例的目的并不重要,因此我们可以将它们全部强制为 PDT(DST 小时),以保持结果的稳定性。反向移植到 v10,就像之前的补丁一样。讨论:https://postgr.es/m/16689-57701daa23b377bf@postgresql.org https://git.postgresql.org/pg/commitdiff/4a071afbd056282746a5bc9362e87f579a56402d

  • 文档:澄清 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() 中的断言失败。提交 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 指出。提交 403a3d91c 中的疏忽。回溯至 9.5 版本,因为那是该版本。 https://git.postgresql.org/pg/commitdiff/7f4235032f0d75ea1ad29b192d57fee3d8fe533e

Álvaro Herrera 推送了此项

Robert Haas 推送了此项

Bruce Momjian 推送了此项

Andres Freund 推送了此项

  • 集中确定临时表的地平线,修复了因倾斜导致的错误。这修复了一个边缘情况下的错误,对于临时表,heap_page_prune() 最终会得到与 heap_vacuum_rel() 不同的地平线。这可能会触发诸如“ERROR: cannot freeze committed xmax ...”之类的错误。该错误是由于 a7212be8b9e “在清理临时表时更积极地设置截止 xmin”与 dc7420c2c92 “快照可扩展性:在构建快照时不计算全局地平线”的相互作用而引入的。问题的原因是 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 中的相关更改。此提交还添加了一个隔离测试,以确保更积极的临时表清理和修剪能够正常工作。调试人:Amit Kapila amit.kapila16 [AT] gmail.com 调试人:Tom Lane tgl [AT] sss.pgh.pa.us 调试人:Ashutosh Sharma ashu.coek88 [AT] gmail.com 作者:Andres Freund andres [AT] anarazel.de 讨论:https://postgr.es/m/20201014203103.72oke6hqywcyhx7s@alap3.anarazel.de 讨论:https://postgr.es/m/20201015083735.derdzysdtqdvxshp@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/94bc27b57680b4e757577e3f5b65dc32f96d33c1

  • 修复后端启动期间错误的数据表地平线计算。当在设置 MyDatabaseOid 之前调用 ComputeXidHorizons() 时(例如,因为在 InitPostgres() 期间在共享关系中遇到死行),普通表的地平线计算过于积极,忽略了连接到数据库的所有后端。在随后的数据表修剪中,仍然可能使用过于积极的地平线,可能导致删除仍然需要的元组。这不好。这是 dc7420c2c92 中的一个错误,如果在 force_parallel_mode 设置为 regress 的情况下运行,则在 94bc27b5768 中添加的测试使其可见。在这种情况下,该错误会被可靠地触发,因为 “pruning_query” 在并行工作进程中运行,并且该并行工作进程的启动很可能会在 pg_database 中遇到死行。修复方法很简单:如果 MyDatabaseId 尚不为人所知,则计算更悲观的数据表地平线。作者:Andres Freund 讨论: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 发送了两个补丁修订版,以向自动分析添加 “IO 读取时间” 日志消息。

Alexander Korotkov 和 Andrey Borodin 交换了补丁,以便在 GetMultiXactIdMembers 中使用共享锁(而不是独占控制锁)来获取偏移量和成员,使 MultiXact 本地缓存大小可配置,添加条件变量以等待角落情况下的下一个 MultXact 偏移量,并添加 GUC 以调整 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 包含运算符。

Peter Eisentraut 发送了另一个补丁修订版,以支持为 SQL 语言编写 CREATE FUNCTION 和 CREATE PROCEDURE 语句,其中函数体符合 SQL 标准,并且可移植到其他实现。

Ibrar Ahmed 发送了另一个补丁修订版,以实现时间 PK/FK 删除和更新。

Justin Pryzby 发送了另一个 pg_dump 的补丁修订版,如果子触发器的状态与其父触发器不匹配,则输出 DISABLE/ENABLE。

Arseny Sher 发送了一个补丁,以修复使用后释放的问题。

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() 的调用来解决。

侯志杰发送了一个补丁,以增强 libpq,使其支持非热备用的多个主机。

Pavel Borisov 发送了一个补丁,修复了在 OSX 上运行 Valgrind 时的错误。

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 进行共享元组存储,并使用此功能实现使用批处理哈希聚合的并行非重复联合聚合和分组集支持。

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() 中减少取消链接,以防范错误。

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 交换了补丁,以修复连接下易失性 expr 的 get_useful_pathkeys_for_relation,并添加注释说明哪些投影是不必要的。

Thomas Munro 发送了另外两个补丁修订版,以实现排序规则版本控制。

Amit Langote 发送了另一个补丁修订版,以从 ExecInitModifyTable 调用 BeginDirectModify,并延迟初始化结果关系信息。

Amit Langote 发送了另一个补丁修订版,以修复 UPDATE 移动元组时 RETURNING 的错误。

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 检查之前的解引用。

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