PostgreSQL 每周新闻 - 2021 年 3 月 21 日

发布于 2021-03-22 由 PWN
PWN

PostgreSQL 每周新闻 - 2021 年 3 月 21 日

本周人物:https://postgresql.life/post/anastasia_lubennikova/

PostgreSQL 产品新闻

pspg 4.4.0,一个为 PostgreSQL 设计的分页器,已发布。https://github.com/okbob/pspg/releases/tag/4.4.0

pg_activity 2.1.2,一个类似 top 的 PostgreSQL 服务器活动监控应用程序,已发布。https://github.com/dalibo/pg_activity/releases/tag/v2.1.2

3 月份 PostgreSQL 工作

https://archives.postgresql.org/pgsql-jobs/2021-03/

PostgreSQL 新闻

PostgreSQL 星球:https://planet.postgresql.org/

PostgreSQL 每周新闻本周由 David Fetter 为您带来

请在太平洋标准时间下午 3:00 前将新闻和公告提交至 david@fetter.org。

已应用的补丁

Peter Geoghegan 推送

藤井正雄推送

  • 使归档程序进程成为辅助进程。此提交更改了 WAL 归档程序进程,使其被视为辅助进程并且可以使用共享内存。这是即将推出的基于共享内存的统计信息收集器补丁系列所需的基础结构补丁。这些补丁系列基本上需要任何可以向共享内存报告统计信息的进程(包括归档程序)。由于此补丁本身有助于简化代码以及用户监视归档程序的状态,因此提前单独提交。此提交简化了 WAL 归档的代码。例如,以前,当后端通知归档程序有一些 WAL 文件要归档时,它们需要通过 postmaster 向归档程序发送信号。另一方面,此提交删除了发送给 postmaster 的信号,并使后端能够使用共享锁直接通知归档程序。此外,作为此更改的一方面,有关归档程序进程的信息可以在 pg_stat_activity 视图中查看。作者:堀口京太郎 复核:Andres Freund、Álvaro Herrera、Julien Rouhaud、Tomas Vondra、Arthur Zakirov、藤井正雄 讨论:https://postgr.es/m/20180629.173418.190173462.horiguchi.kyotaro@lab.ntt.co.jp https://git.postgresql.org/pg/commitdiff/d75288fb27b8fe0a926aaab7d75816f091ecdc27

  • 修复 postmaster.c 中的注释。提交 86c23a6eb2 将指定 postgres 将通过发送信号 SIGSTOP 来停止所有其他服务器进程的选项从 -s 更改为 -T。但是,以前有一些注释错误地解释了 SIGSTOP 行为是由 -s 选项设置的。此提交修复了它们。作者:堀口京太郎 复核:藤井正雄 讨论:https://postgr.es/m/20210316.165141.1400441966284654043.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/fd31214075cc740e43edc71ca1c385c8c53047b7

Thomas Munro 推送

Tom Lane 推送

  • 解决 MinGW-64 中 setjmp/longjmp 支持的问题。我们很难不认为 MinGW-64 上的 setjmp/longjmp 存在问题,因为我们看到在代码中进行完全不相关的更改后,故障时有时无。其他项目(例如 Ruby)已经放弃,并开始在该平台上使用 gcc 的 setjmp/longjmp 内置函数;此补丁只是遵循了这一做法。请注意,这对于包含 setjmp 或 longjmp 的函数来说是一个非常根本的 ABI 破坏,因此我们不能真的考虑回溯修补。根据 Regina Obe 和 Heath Lord 的报告,以及 buildfarm 成员 walleye 最近的故障,以及 fairywren 上较早的故障。Juan José Santamaría Flecha 讨论:https://postgr.es/m/000401d716a0$1ed0fc70$5c72f550$@pcorp.us 讨论:https://postgr.es/m/CA+BEBhvHhM-Bn628pf-LsjqRh3Ang7qCSBG0Ga+7KwhGqrNUPw@mail.gmail.com 讨论:https://postgr.es/m/f1caef93-9640-022e-9211-bbe8755a56b0@2ndQuadrant.com https://git.postgresql.org/pg/commitdiff/146cb3889c3ccb3fce198fe7464a1296a9e107c3

  • 改进 BIND 消息中错误参数值的日志记录。自 commit ba79cb5dc 以来,在扩展查询模式下发生错误时,绑定参数的值会被记录下来。然而,我们只在收集并转换了所有参数值之后才这样做,因此未能提供任何有用的无效参数问题定位。添加一个在参数收集期间使用的单独回调,并使其打印参数编号,以及如果使用文本输入格式则打印输入字符串。Justin Pryzby 和 Tom Lane 讨论:https://postgr.es/m/20210104170939.GH9712@telsasoft.com 讨论:https://postgr.es/m/CANfkH5k-6nNt-4cSv1vPB80nq2BZCzhFVR5O4VznYbsX0wZmow@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1ea396362be1615e926ea69d666c770081a0d3ef

  • 避免 SSL 参数处理中的极端情况内存泄漏。从 ssl_ca_file 读取根证书列表后,立即将其安装为新 SSL 上下文的客户端 CA 列表。这使得 SSL 上下文拥有该列表的所有权,以便 SSL_CTX_free 将释放它。这避免了如果我们进一步在 be_tls_init() 中失败时发生的永久性内存泄漏,如果提供了伪造的 CRL 数据,可能会发生这种情况。只有在服务器启动后 CRL 参数中断(否则我们只会退出),然后服务器在不修复 CRL 数据的情况下多次 SIGHUP,这种泄漏才会发生。这可能相当不可能,但修复它似乎值得,即使只是因为代码更清晰了。当我们在这样做的时候,添加一些关于此逻辑的内存管理方面的注释。Jelte Fennema 和 Andres Freund 独立指出。回溯修补到 v10;在 commit de41869b6 之前没有关系,因为我们不会在 SIGHUP 期间重新执行此代码。讨论:https://postgr.es/m/16160-18367e56e9a28264@postgresql.org https://git.postgresql.org/pg/commitdiff/4b12ab18c9d0735d760bf7667b158707b06e5df8

  • 文档:改进 PL/pgSQL 中变量替换的讨论。这有点不连贯,部分原因是一个考虑不周的决定,即将不返回结果行的 SQL 命令记录为好像它们与返回结果行的命令没有任何共同之处。重新排列,以便我们对变量替换进行一次讨论,该讨论明确适用于所有类型的 SQL 命令,然后单独处理处理命令输出的问题。明确说明 EXPLAIN、CREATE TABLE AS SELECT 和类似的包含可优化语句的命令,出于变量替换的目的,将像可优化语句一样运行。在同一区域进行一些小的文字润色。David Johnston 和 Tom Lane,由 Pavel Stehule 和 David Steele 审查。讨论:https://postgr.es/m/CAKFQuwYvMKucM5fnZvHSo-ah4S=_n9gmKeu6EAo=_fTrohunqQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c783e656d41816b0328cb4bff27f11b70200770e

  • 为 pg_basebackup 的 tar 格式输出添加端到端测试。现有的测试脚本确实使用 -Ft 选项运行 pg_basebackup,但它没有真正尝试验证结果的健全性。我们不会知道输出是否与标准的“tar”程序不兼容,也不会知道服务器是否无法从恢复的输出启动。值得注意的是,这意味着 xlog.c 的 read_tablespace_map() 没有得到有意义的测试,因为该代码仅在 tar 格式的情况下使用。(我们确实有对从普通格式输出恢复的合理覆盖,尽管它在 src/test/recovery 中,而不是在这里。)因此,尝试解压输出并从中启动服务器,而不是只是希望它是好的。此测试假设本地“tar”具有“-C directory”开关。虽然 POSIX 没有保证这一点,但我的研究表明所有未消亡的 tar 实现都具有它。如果 buildfarm 的意见不同,我们可以稍微复杂化测试以避免要求它。这可能应该回溯修补,但我不确定它在 d66b23b03 之前是否可以在 Windows 上运行。https://git.postgresql.org/pg/commitdiff/081876d75ea15c3bd2ee5ba64a794fd8ea46d794

  • 防止 read_tablespace_map() 中的缓冲区溢出。Trustwave 的 Robert Foggia 报告说,read_tablespace_map() 未能防止其堆栈输入缓冲区溢出。由于假定表空间映射文件是可信的,这似乎不是一个有趣的安全漏洞,但为了稳健性,我们仍然应该修复它。当在此处时,记录 pg_basebackup 的 --tablespace-mapping 选项不适用于 tar 格式输出,因为它确实不适用。要使其工作,我们必须修改服务器发送的 tarball 中的 tablespace_map 文件,这可能是可行的,但我不会自愿这样做。(更轻松的解决方案将需要更改 basebackup 协议,以便源服务器可以调整映射。这也不是很吸引人。)https://git.postgresql.org/pg/commitdiff/a50e4fd028a1ece2b1a04df2c9ae6581783e9eef

  • 服务器处理“表空间映射”文件的代码审查。在查看 Robert Foggia 的报告时,我注意到同一区域中的其他一些问题

  • 路径名中反斜杠引用换行符的方案是错误的;如果路径名中的最后一个普通字符是反斜杠,则它将出现错误。我不确定我们为什么要费心允许表空间路径中出现换行符,但如果我们打算这样做,我们应该在不引入其他问题的情况下进行。因此,反斜杠本身也必须用反斜杠转义。* 作者没有非常仔细地阅读 sscanf 手册页,因为这段代码会删除路径中的任何前导空格。(我怀疑在实践中会出现带有前导空格的表空间路径;但是,如果我们费心允许路径中出现换行符,那么前导空格似乎并非不可能。)无论如何,使用 sscanf 来查找第一个空格是多余的。* 虽然我不太确定转义 \r 和 \n 的理由是什么,但如果想法是允许文件中出现 Windows 换行符,那么这段代码会失败,因为它如果看到 \r 后跟 \n 则会引发错误。* 对于映射文件中不完整的最后一行,没有交叉检查,这可能是转义不正确的错误的明显症状。在生成端,除了转义问题外,我们还有:* 如果 needtblspcmapfile 为 true,则 do_pg_start_backup 将在 tablespaceinfo->path 值中传递回转义字符串,这是任何调用者都不希望或准备好处理的。我不确定是否存在由此产生的实际错误,但它看起来可能存在(考虑到假设实际上任何人的表空间路径中都有换行符的可疑假设)。* 它对 pg_tblspc 目录中出现随机内容的可能性并不是很偏执。我认为我们应该忽略任何没有类似 OID 名称的东西。转义规则更改似乎无法回溯修补:它需要在 tablespace_map 文件中将反斜杠加倍,这基本上是 basebackup 格式的更改。导致麻烦的可能性远大于现有错误导致麻烦的可能性。其余的似乎不太可能引起问题,因此不进行回溯修补。https://git.postgresql.org/pg/commitdiff/8620a7f6dbdf978e57cdb9f42802a0418656d863

  • 文档:删除 RLS 示例中的重复步骤。似乎是 093129c9d 中的复制粘贴错误。根据来自 max1@inbox.ru 的报告。讨论:https://postgr.es/m/161591740692.24273.4202054598867879464@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/70945649d734d16be22c3d1d90dd8c3d3c1e9d89

  • 修复 foreach_delete_current() 的误用。我们的编码约定要求将此宏的结果分配回原始 List 变量。在这种用法中,由于 List 不可能为空,因此没有实际的错误 --- 但一些编译器对此发出警告。be45be9c3 中的疏忽。讨论:https://postgr.es/m/35077b31-2d62-1e31-0e2e-ddb52d590b73@enterprisedb.com https://git.postgresql.org/pg/commitdiff/1d581ce7129d7a33cd4ad27f8f246abfa1fd2db9

  • 删除 relcache 条目时不泄漏 rd_statlist。尽管这些列表通常为 NIL,即使不为空也不太可能很大,但不断的 relcache 更新流量最终可能会导致 CacheMemoryContext 出现明显的膨胀。通过 valgrind 测试发现。回溯修补到添加此字段的 v10。讨论:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/28644fac10731e30e70b622986a6fbbeb5a5b2f9

  • 不要在 libpqrcv_check_conninfo() 中泄漏 malloc 的错误字符串。我们泄漏了来自 PQconninfoParse 的错误报告(如果有的话)。似乎不太可能实际使用模式会经常重复失败以产生严重的膨胀,但让我们无论如何都回溯修补以保持所有分支中的代码相似。通过 valgrind 测试发现。回溯修补到添加此代码的 v10。讨论:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9bacdf9f536a3720976ae258238cb46c691ce9b2

  • 删除 ispell 缓存条目时,不要泄漏编译后的正则表达式。文本搜索缓存机制假设我们可以通过重置关联的长期内存上下文来清除无效的字典缓存条目。但是,这对于使用正则表达式的 ispell 词缀不起作用,因为正则表达式库处理普通的旧 malloc。因此,每次删除此类缓存条目时,我们都会泄漏编译后的正则表达式。这可能会很快累积,因为即使是相当简单的正则表达式也可能占用数十 kB,而大的正则表达式可能会占用数 MB。添加内存上下文回调以确保在清除其所属的缓存条目时释放正则表达式。通过 valgrind 测试发现。这个问题很古老,因此回溯修补到所有支持的分支。讨论:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/d303849b059c3c315e5a8d4239016f8328f3296c

  • 不要在长期上下文中运行 RelationInitTableAccessMethod。此函数中的某些代码路径执行 syscache 查找,这可能会导致表访问,并可能导致泄漏垃圾到调用者的上下文中。如果所述上下文是 CacheMemoryContext,我们最终将出现明显的膨胀。但是修复此问题并不比移动一个内存上下文切换步骤更难。(其他调用者没有问题。)Andres Freund 和我通过 valgrind 测试独立发现了这一点。回溯修补到添加此代码的 v12。讨论:https://postgr.es/m/20210317023101.anvejcfotwka6gaa@alap3.anarazel.de 讨论:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/415ffdc2205e209b6a73fb42a3fdd6e57e16c7b2

  • 当 GUC 设置被拒绝时,不要泄漏 malloc 分配的字符串。因为 guc.c 倾向于将所有字符串值保存在 malloc 分配的而不是 palloc 分配的存储中,它必须比平时更小心以避免泄漏。字符串 GUC 钩子检查中的错误退出未能清除提议的值字符串,并且 ProcessGUCArray() 中的错误退出未能清除 ParseLongOption() 的 malloc 分配的结果。通过 valgrind 测试发现。这个问题由来已久,所以回溯到所有支持的分支。讨论:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/377b7a83007d277d32ef19f7c7590c8668d504cb

  • 盲目尝试修复 MSYS 的测试脚本的 tar 调用。Buildfarm 成员 fairywren 不喜欢我在 commit 081876d75 中添加的测试用例。我猜原因是我不应该在 tar 命令行中使用 perl2host 化的路径。https://git.postgresql.org/pg/commitdiff/27ab1981e7c9b8fcbcb143c5f6f706441a52bbc8

  • 避免在 RestoreGUCState() 中泄漏内存,并改进注释。RestoreGUCState 将 InitializeOneGUCOption 应用于已存在的 GUC 条目,导致任何 malloc 分配的辅助数据被遗忘。我们确实希望将 GUC 重置为其编译时的默认值,而 InitializeOneGUCOption 似乎是实现此目的的最佳方法,因此在之前添加代码以释放任何现有的辅助数据。can_skip_gucvar、SerializeGUCState 和 RestoreGUCState 之间的交互比它们不透明的注释向粗心的读者暗示的要微妙得多。重写并扩充注释,以使其更清楚地说明正在发生的事情。删除 read_nondefault_variables 中一个长期过时的断言:自 f5d9698a8 安装了更好的控制方法以来,set_config_option 的行为不再依赖于 IsInitProcessingMode。虽然这是修复一个明显的内存泄漏,但该泄漏不太可能涉及任何大量数据,并且它只能在一个工作进程的生命周期中发生一次。因此,似乎没有必要冒任何回溯的风险。讨论:https://postgr.es/m/4105247.1616174862@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/f0c2a5bba6c566fad781802537eb17f2977702bc

  • 修复拒绝错误的 DH 参数时的内存泄漏。在回溯 e0e569e1d 时,我注意到还有一些其他地方我们应该应用 DH_free();也就是说,当我们从文件中加载一些 DH 参数然后因为它们不够安全而拒绝它们时。虽然似乎不太可能有人在生产中遇到这些代码路径,更不用说重复执行了,但为了保持一致性,让我们修复它。回溯到引入此代码的 v10。讨论:https://postgr.es/m/16160-18367e56e9a28264@postgresql.org https://git.postgresql.org/pg/commitdiff/e835e89a0fd267871e7fbddc39ad00ee3d0cb55c

  • 修复 pg_dump 对每个属性压缩选项的处理。commit bbe0a81db 中使用的方法对于转储的可移植性来说是灾难性的。相反,在单独的 ALTER TABLE 命令中处理非默认的压缩选项。这减少了大多数列以相同方式压缩的常见情况下的重复操作,并且可以使转储还原到不了解每个属性压缩选项的服务器(只要你愿意忽略 ALTER TABLE 命令中的语法错误)。在 bbe0a81db 之后还有很多工作要做,但我正在快速跟踪这一部分,因为我们需要看看它是否足以使 buildfarm 的跨版本升级测试满意。Justin Pryzby 和 Tom Lane 讨论:https://postgr.es/m/20210119190720.GL8560@telsasoft.com https://git.postgresql.org/pg/commitdiff/aa25d1089ac00bbc3f97d2efe8f54c3d4beed5d1

  • 抑制各种新的编译器警告。不理解 elog(ERROR) 不返回的编译器在此处发出警告。在 libpq_pipeline.c 中的情况下,我们没有将 pg_fatal() 标记为 noreturn 并没有真正帮助解决问题。根据 buildfarm。https://git.postgresql.org/pg/commitdiff/9fb9691a88ae8df9bc30e0f0f72de7c96e73e125

Álvaro Herrera 推送

Michaël Paquier 推送

Stephen Frost 推送

Robert Haas 推送

  • 修复令人困惑的 amcheck 损坏消息。如果根本没有 TOAST 块,则不要抱怨最后一个 TOAST 块号与我们预期的不同。在这种情况下,说最终块号为 0 并不是很准确,并且该值从 TOAST 表中缺失的事实已单独报告。Mark Dilger 讨论:http://postgr.es/m/AA5506CE-7D2A-42E4-A51D-358635E3722D@enterprisedb.com https://git.postgresql.org/pg/commitdiff/4078ce65a0f7197180a9be2c6460ea4bf909bd98

  • 允许配置 LZ4 TOAST 压缩。现在有一个针对每个列的 COMPRESSION 选项,可以设置为 pglz(默认值,也是迄今为止唯一的选项)或 lz4。或者,如果您愿意,可以将新的 default_toast_compression GUC 设置为 lz4,那么对于未指定值的新的表列,这将成为默认值。PostgreSQL 代码中没有 lz4 支持,因此要使用 lz4 压缩,必须使用 --with-lz4 构建 PostgreSQL。通常,TOAST 压缩是指对单个列值进行压缩,而不是对整个元组进行压缩,这些值可以在元组内内联压缩,也可以压缩后存储在 TOAST 表中,这些属性也适用于此功能。在此提交之前,TOAST 指针的 va_extsize 字段中有两个未使用的位,压缩数据项的 va_rawsize 字段中有两个未使用的位。这些位未使用,因为 varlena 的长度限制为 1GB;我们现在使用它们来指示使用的压缩类型。这意味着我们只有位空间可以容纳另外 2 种内置压缩类型,但如有必要,我们可以通过为我们最终想要添加的任何其他类型引入新的 vartag_external 值来解决这个问题。希望在这里提供广泛的算法选择不会太重要,因为我们添加的每一种算法不仅需要更多的编码,而且还会为每个打包者增加构建依赖项。尽管如此,至少做这么多似乎是值得的,因为 LZ4 比 PGLZ 获得了更好的压缩率,并且 CPU 使用率更低。LZ4 压缩的数据项有可能像 PGLZ 一样泄漏到存储在磁盘上的复合类型值中。LZ4 压缩的属性也可能通过 SQL 命令(如 CREATE TABLE AS 或 INSERT .. SELECT)复制到不同的表中。强制解压缩此类值会很昂贵,因此 PostgreSQL 从未这样做过。出于同样的原因,即使目标表偏好与源数据使用的压缩方法不同的压缩方法,我们也不会强制重新压缩已压缩的值。这些架构决策或许存在争议,但重新审视它们远远超出了作为本项目一部分可以实现的目标。然而,作为 VACUUM FULL 或 CLUSTER 的一部分进行重新压缩相对便宜,因此如果表的配置压缩方法与其中存储的某些列值使用的压缩方法不匹配,则此提交会调整这些命令以执行重新压缩。Dilip Kumar。这项工作的原始补丁由 Ildus Kurbangaliev 编写,而这些补丁又基于 Nikita Glukhov 更早期的工作,但此后的设计发生了很大变化,因为允许在运行的系统上添加和删除大量潜在的压缩方法被证明过于麻烦,考虑到上面提到的一些架构问题;现在首先添加哪个特定压缩方法的选择是不同的;并且很多代码都经过了大量重构。最近,Justin Przyby 在测试和审查方面提供了很多帮助,此版本还包含了他的一些代码贡献。来自 Tomas Vondra、Álvaro Herrera、Andres Freund、Oleg Bartunov、Alexander Korotkov 和我的其他设计输入和审查。讨论:http://postgr.es/m/20170907194236.4cefce96%40wp.localdomain 讨论:http://postgr.es/m/CAFiTN-uUpX3ck%3DK0mLEk-G_kUQY%3DSNOTeqdaNRR9FMdQrHKebw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/bbe0a81db69bd10bd166907c3701492a29aca294

  • 修复 ATExecAlterColumnType 中使用释放系统缓存 (ReleaseSysCache) 后出现的问题。由提交 bbe0a81db69bd10bd166907c3701492a29aca294 引入。每个构建场成员 prion。https://git.postgresql.org/pg/commitdiff/d00fbdc431192c3e429b3e91c43d364e5c7ba680

Amit Kapila 推送

Peter Eisentraut 推送

Andres Freund 推送

Magnus Hagander 推送

Tomáš Vondra 推送

Andrew Dunstan 推送了

待处理的补丁

Erica Zhang 发送了另一个补丁修订版,以在 contrib 下为 pg_stat_statements 兼容性验证添加一些测试。

Jürgen Purtz 发送了另一个补丁修订版,以更改 JOIN 教程,使其更加关注显式连接。

Noah Misch 发送了一个补丁,将类似的算法合并到 roles_is_member_of() 中。

David Rowley 发送了另一个补丁修订版,以缓存 PathTarget 和 RestrictInfo 的易失性,允许 estimate_num_groups() 返回有关估计的更多详细信息,允许 simplehash.h 的用户执行直接删除,添加 Result Cache 执行器节点,并删除 nodeResultCache.c 中的代码重复。

Vigneshwaran C 发送了一个补丁,如果事务锁定了系统表/用户目录表,则使预备事务失败。

Laurenz Albe 发送了另一个补丁修订版,以改进 \e、\ef 和 \ev,如果编辑器在未保存的情况下退出,则通过擦除查询缓冲区而不是执行上一个语句。

Nathan Bossart 发送了另一个补丁修订版,以避免过早创建存档状态“.ready”文件,并通过崩溃跟踪已通知的存档准备就绪位置。

Mike Insoo 发送了一个补丁,以检查在解码目录修改提交记录时,它是否属于在 restart_lsn 处处理的 RUNNING_XACT xid。如果是,则将其 xid 和子事务添加到逻辑解码快照中已提交的事务列表中。

Justin Pryzby 发送了另外三个补丁修订版,以使 FPI 可以使用不同的压缩方法。

Jim Mlodgenski 发送了另一个补丁修订版,以添加解析器钩子和使用它的测试。

Julien Rouhaud 发送了另一个补丁修订版,为 REINDEX 命令添加新的 OUTDATED 过滤功能,以及 reindexdb 实用程序的相应选项。使用时,REINDEX 将仅处理具有过时依赖关系的索引。目前,仅支持对排序规则的依赖,但我们将来可能会支持其他类型的依赖。

Georgios Kokolatos 和 Michaël Paquier 交换了补丁,以使 dbsize 更加一致。

Amit Kapila、Justin Pryzby 和 Greg Nancarrow 交换了补丁,以使 INSERT .... SELECT 可以并行执行。

Bruce Momjian 发送了另外两个补丁修订版,以实现密钥管理。

Bharath Rupireddy 发送了另外四个补丁修订版,以添加具有等待和超时功能的 pg_terminate_backend() 版本。

Masahiro Ikeda 发送了另一个补丁修订版,以使 WAL 接收器报告 WAL 统计信息。

Iwata Aya 发送了另外四个补丁修订版,以实现 libpq 调试日志。

Amul Sul 发送了另外两个补丁修订版,以添加 ALTER SYSTEM READ {ONLY | WRITE} 将使用的基础结构。

Jacob Champion 和 Michaël Paquier 交换了补丁,以记录来自所有身份验证后端的经过身份验证的身份。

Masahiro Ikeda 发送了四个补丁修订版,以使统计收集器在请求立即关闭时关闭而不写入统计文件。

Mark Rofail 和 Andreas Karlsson 交换了补丁,以实现外键数组。

Ajin Cherian、Peter Smith 和 Takamichi Osumi 交换了补丁,以实现两阶段事务的逻辑解码。

Álvaro Herrera 发送了另外三个补丁修订版,以实现 ALTER TABLE .. DETACH PARTITION CONCURRENTLY。

Amit Langote 发送了另一个补丁修订版,以允许在跨分区更新期间批量插入。

IIvan Panchenko 发送了另一个补丁修订版,以添加登录触发器。

Peter Eisentraut 发送了另一个补丁修订版,以使可以从过程获取动态结果集。在过程中声明带有 RETURN 的游标会使游标的数据作为 CALL 调用的结果返回。该过程需要使用 DYNAMIC RESULT SETS 属性声明。

Amit Kapila 发送了一个文档补丁,以在 pg_subscription 中添加子流的描述。

Amit Kapila 发送了一个补丁,以防止在创建 tablesync 插槽时发生取消/死亡中断。

Bharath Rupireddy 发送了另一个补丁修订版,以重构实现 REFRESH MATERIALIZED VIEW 的代码,以提高可理解性。

Ranier Vilela 发送了一个补丁,以涵盖 Windows 上重命名文件时的边缘情况。

Hou Zhijie 发送了另一个补丁修订版,以扩展安全检查以支持并行插入外键关系,并跳过 CommandCounterIncrement。

Fujii Masao 发送了另外两个补丁修订版,以改进 pgbench 的 \sleep 命令。

Andres Freund 和 Kyotaro HORIGUCHI 交换了补丁,以使统计收集器使用共享内存而不是文件作为统计收集器中的临时存储。

Masahiko Sawada 发送了另一个补丁修订版,以修复涉及多个 Postgres 外部服务器的事务。

Bharath Rupireddy 发送了另一个补丁修订版,以改进 PID XXXX 不是 PostgreSQL 服务器进程的消息。与其说消息“不是服务器进程”,不如说“不是后端进程”。这将清楚地表明给定的 PID 不是后端进程,但它可以是其他进程的 pid 或其他 postmaster 子进程的 pid 或无效的 pid。

Zeng Wenjing 发送了另一个补丁修订版,以实现全局临时表。

Tomáš Vondra 发送了另一个补丁修订版,以实现索引跳过扫描。

Atsushi Torikoshi 发送了另一个补丁修订版,以添加 memorycontext elog 打印。

John Naylor 发送了另外两个补丁修订版,以修复堆空间管理中的错误,该错误对 fillfactor 过分谨慎。以前,如果页面中有剩余的未使用的行指针,则 fill factor 较低的表将无法用于足够大的新元组以超过 fillfactor,即使页面根本不包含元组也是如此。这导致了不必要的关系扩展。通过允许一些等于行指针可能占用最大空间的 1/8 的空闲空间来修复。这有点随意,但应该允许许多以前失败的情况成功。根据 Floris van Nee 的报告。

Pavel Stěhule 发送了另一个补丁修订版,以向 PL/pgsql 添加例程标签。

Michaël Paquier 发送了另一个补丁修订版,以修复 PITR 和 2PC 之间的不一致之处。

Bertrand Drouvot 发送了另一个补丁修订版,以在备用服务器上实现最小逻辑解码。

Amit Langote 发送了一个补丁,以调整级联 RI 更新/删除期间的序列化失败的处理。

Peter Eisentraut 发送了 ibpq 补丁的另一个修订版本:为 SSL 连接设置服务器名称指示 (SNI)。默认情况下,libpq 将设置 TLS 扩展“服务器名称指示”(SNI)。这允许支持 SNI 的 SSL 代理路由连接。(这需要一个了解 PostgreSQL 协议的代理,而不仅仅是任何 SSL 代理。)将来,这也可以允许服务器为不同的主机规范使用不同的 SSL 证书。(这将需要新的服务器功能。这将是该功能的客户端部分。)由于 SNI 使主机名以明文形式出现在网络流量中,因此在某些情况下可能不希望这样做。因此,还添加了一个 libpq 连接选项“sslsni”来关闭它。

Amit Langote 发送了另一个补丁修订版本,用于在输入关系是分区关系时将其标记为完全分组分区关系,并允许在分区表上设置 parallel_workers。

Ibrar Ahmed 发送了另一个补丁修订版本,使 INSERT SELECT 可以使用 BulkInsertState 和 multi_insert。

John Naylor 发送了另一个补丁修订版本,向编码转换函数添加“noError”参数,并使用该参数以更大的块进行 COPY FROM 编码转换/验证。

Thomas Munro 发送了另一个补丁修订版本,用于为 WAL 使用预取。

Peter Geoghegan 发送了一个补丁,添加了一种在使用 git blame 时忽略 pgindent 运行和类似操作的方法。

Peter Eisentraut 发送了另一个补丁修订版本,用于添加 result_format_auto_binary_types 设置。

藤井正雄发送了另一个补丁修订版本,将 WalReceiverWaitStart 等待事件的类型从 Client 更改为 IPC。

Marina Polyakova 发送了一个补丁,通过允许并发加载 WAL 文件来减少从存档恢复数据库所需的时间。

Peter Eisentraut 发送了另一个补丁修订版本,用于实现 SQL 标准函数体。

Andrei Zubkov 发送了一个补丁,用于纠正 pg_stat_statements 中对释放事件的计数。

James Coleman 发送了另一个补丁修订版本,以改进备用连接被拒绝的错误消息。当前,当备用服务器完成启动但 hot_standby 配置为关闭时,客户端连接时的错误消息为“数据库系统正在启动”,这令人感到不必要地困惑(并且也不是很准确)。相反,发送一条有用的错误消息,以便用户立即知道他们的服务器配置为拒绝这些连接。

John Naylor 发送了另一个补丁修订版本,向编码转换函数添加“noError”参数,然后使用它来替换 pg_utf8_verifystr(),使用两种更快的实现:一种在 Intel 上使用 SSE-4.1 指令,另一种使用定制的回退函数,而不是依赖于 pg_utf8_verifychar() 和 pg_utf8_isvalid() 的函数。这一个大致基于 simdjson 库中包含的回退。

Peter Eisentraut 发送了另一个补丁修订版本,将 EXTRACT 的返回类型更改为 numeric。

James Coleman 发送了另一个补丁修订版本,用于在 OR'd ScalarArrayOps 中查找哈希 const 数组。

Amit Khandekar 发送了另一个补丁修订版本,通过使用 64 位块而不是 char 值来加速 tsvectors 的两个 gist 索引签名的异或运算,并避免对 pg_popcount32/64() 调用的函数指针解引用。

Etsuro Fujita 发送了另一个补丁修订版本,用于在 postgres_fdw 节点上实现异步追加。

Konstantin Knizhnik 发送了另一个补丁修订版本,为 auto_explain 添加两个统计 GUC:add_statistics_threshold 和 add_statistics_suggest_only。

Gilles Darold 发送了另一个补丁修订版本,用于在 XactCommand 级别添加钩子。

Tatsuo Ishii 发送了另一个补丁的三个修订版本,使 pgbench 中可以使用 COPY FREEZE。

Julien Rouhaud 发送了另一个补丁修订版本,用于将 queryId 添加到 pg_catalog.pg_stat_activity 视图。

Amit Langote 发送了另一个补丁修订版本,用于导出 get_partition_for_tuple(),使其对 execPartition.c 之外的其他事物可见,并在其他地方使用它以避免对某些 RI 检查使用 SPI。

Peter Smith 发送了一个补丁,修复了在 stream_cleanup_files 中,代码正在取消引用 HASH_REMOVE 返回的哈希条目的错误。

Thomas Munro 发送了另一个补丁修订版本,以支持 psql 的 \watch 命令的 PSQL_WATCH_PAGER,并尝试使用 sigwait() 使其工作。

Michaël Paquier 发送了一个补丁,用于清理 Kerberos 身份验证测试。

Thomas Munro 发送了另一个补丁修订版本,以提供 recovery_init_sync_method=wal。

Gilles Darold 和 Erik Rijkers 交换了补丁,以添加一些新的函数来计数和以其他方式描述正则表达式匹配。

David Fetter 发送了另一个补丁修订版本,用于实现 popcount(现在称为 bit_count)。

Justin Pryzby 发送了另一个补丁修订版本,添加了一种为 FPI 使用不同压缩方法的方法。

Matthias van de Meent 发送了一个补丁,以确保当 [+] 是 psql 元命令的选项时,\? 输出会提及它是,而不是其他情况。

Jan Wieck 和 Tom Lane 交换了补丁,以确保 pg_upgrade 保留 datdba。

Konstantin Knizhnik 发送了另一个补丁修订版本,用于实现内置的连接池。