本周人物:https://postgresql.life/post/anastasia_lubennikova/
发布了 psqlg 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
https://archives.postgresql.org/pgsql-jobs/2021-03/
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。
Peter Geoghegan 提交
注意:VACUUM 时堆页包含死项。在惰性 VACUUM 的堆扫描过程中,一致地设置一个标志变量,该变量跟踪当前堆页是否包含死项。我们忽略了一种常见情况,即存在一个预先存在(甚至是一个新的)LP_DEAD 堆行指针。同时还明确指出,该变量可能会受到现有行指针的影响,例如来自早期机会性清理操作。此区分很重要,因为它是我们不能仅使用附近的 tups_vacuumed 变量的主要原因。不进行回溯。理论上,未能设置页面级别标志变量没有后果。目前,它仅用于防御性地检查标记为 all visible 的页面是否包含死项,而这无论如何都不应该发生(如果发生,则表必定损坏)。作者:Masahiko Sawada sawada.mshk@gmail.com 诊断者:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/CAD21AoAtZb4+HJT_8RoOXvu4HM-Zd4HKS3YSMCH6+-W=bDyh-w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0ea71c93a06ddc38e0b72e48f1d512e5383a9c1b
amcheck:减少调试消息的详细程度。空兄弟页面有时比我们报告的任何其他 DEBUG1 级别事件都更常见。将相关情况的级别提高到 DEBUG2,以避免用户因相对不重要的细节而被淹没。https://git.postgresql.org/pg/commitdiff/65445469d6de3670f3e027236613e093e119ec55
修复关于承诺元组的注释。commit d168b666823(增加了自底向上的索引删除)中的疏忽。https://git.postgresql.org/pg/commitdiff/fbe4cb3bd49f9e524f53ef77c775c1bad4d0312a
Fujii Masao 提交
将归档进程设置为辅助进程。此提交将 WAL 归档进程更改为辅助进程,并允许其使用共享内存。这是即将到来的基于共享内存的统计信息收集器补丁系列所需的基础设施补丁。这些补丁系列基本上需要包括归档进程在内的任何可以报告统计信息的进程访问共享内存。由于此补丁本身对于简化代码非常有用,并且当用户监视归档进程的状态时,它已单独提交。此提交简化了 WAL 归档的代码。例如,以前后端需要在通知归档进程有 WAL 文件要归档时通过 postmaster 发送信号。另一方面,此提交删除了该信号到 postmaster 的操作,并允许后端使用共享锁直接通知归档进程。此外,作为此更改的附带好处,归档进程的信息现在可以在 pg_stat_activity 视图中查看。作者:Kyotaro Horiguchi 评审者:Andres Freund, Álvaro Herrera, Julien Rouhaud, Tomas Vondra, Arthur Zakirov, Fujii Masao 讨论:https://postgr.es/m/20180629.173418.190173462.horiguchi.kyotaro@lab.ntt.co.jp https://git.postgresql.org/pg/commitdiff/d75288fb27b8fe0a926aaab7d75816f091ecdc27
修复 postmaster.c 中的注释。Commit 86c23a6eb2 将指定 postgres 通过发送 SIGSTOP 信号停止所有其他服务器进程的选项从 -s 更改为 -T。但之前有一些注释错误地解释了 SIGSTOP 行为由 -s 选项设置。此提交修复了它们。作者:Kyotaro Horiguchi 评审者:Fujii Masao 讨论:https://postgr.es/m/20210316.165141.1400441966284654043.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/fd31214075cc740e43edc71ca1c385c8c53047b7
Thomas Munro 推送
从并行查询测试中删除 SERIALIZABLE 的变通方法。SERIALIZABLE 不再阻止并行,因此我们可以从回归测试中删除一些过时的变通方法和注释。此更改在 12 版中通过 commit bb16aba5 引入,但并不值得回溯。同时修复了一个拼写错误。评审者:Bharath Rupireddy bharath.rupireddyforpostgres@gmail.com 讨论:https://postgr.es/m/CA%2BhUKGJUaHeK%3DHLATxF1JOKDjKJVrBKA-zmbPAebOM0Se2FQRg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/eeb60e45d82d5840b713a8741ae552238d57e8b9
启用 REFRESH MATERIALIZED VIEW 的并行性。将 CURSOR_OPT_PARALLEL_OK 传递给 pg_plan_query(),以便在运行底层 SELECT 查询时考虑并行计划。commit e9baa5e9(为 CREATE MATERIALIZED VIEW 执行此操作)中未执行此操作,因为它当时尚不安全。由于 REFRESH 始终在插入到新创建的表然后通过单独的操作进行合并或交换数据,因此我们也可以在此处启用此类计划。作者:Bharath Rupireddy bharath.rupireddyforpostgres@gmail.com 评审者:Hou, Zhijie houzj.fnst@cn.fujitsu.com 评审者:Luc Vlaming luc@swarm64.com 评审者:Thomas Munro thomas.munro@gmail.com 讨论:https://postgr.es/m/CALj2ACXg-4hNKJC6nFnepRHYT4t5jJVstYvri%2BtKQHy7ydcr8A%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/9e7ccd9ef64d05e87ceb1985d459bef9031205c0
修复更高隔离级别的 transaction.sql 测试。能够对设置为 serializable 或 repeatable read 的默认事务级别运行 "installcheck" 似乎是一个有用的健全性检查。在这些配置下,目前只有一个测试失败,让我们修复它。暂时不进行回溯,因为它在 stable 分支的许多其他地方都会失败。如果我们包含此配置在自动化测试中,我们也必须回溯并修复那些。评审者:Tom Lane tgl@sss.pgh.pa.us 讨论:https://postgr.es/m/CA%2BhUKGJUaHeK%3DHLATxF1JOKDjKJVrBKA-zmbPAebOM0Se2FQRg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/37929599499fe5760a9dbab48a10a898879a0d44
修复并行哈希连接批次清理中的竞态条件。在非常不走运的时机且 parallel_leader_participation 关闭的情况下,PHJ 可能会在批次状态被释放时尝试访问它。代码原本打算通过检查已清除的指针来防止这种情况,但这是错误的。通过引入额外的屏障阶段来修复。新阶段 PHJ_BUILD_RUNNING 意味着访问批次状态以查找需要帮助的批次是安全的,而 PHJ_BUILD_DONE 意味着为时已晚。最后一个分离的进程将像以前一样释放批次状态的数组,但现在它将同时原子地推进阶段,以便迟到的附加进程可以避免危险,而不会发生数据竞争。这与批次哈希表的释放方式类似(参见 PHJ_BATCH_PROBING 和 PHJ_BATCH_DONE 阶段)。由一次性构建农场故障揭示,其中 BarrierAttach() 因内存被 dsa_free() 覆盖而失败了健全性检查断言。回溯到 11 版本,该代码是在 11 版本中添加的。报告者:Michael Paquier michael@paquier.xyz 讨论:https://postgr.es/m/20200929061142.GA29096%40paquier.xyz https://git.postgresql.org/pg/commitdiff/3b8981b6e1a2aea0f18384c803e21e9391de669a
更新并行哈希连接阶段的名称。Commit 3048898e 从对应于屏障阶段的某些等待事件名称中删除了 "-ING"。更新阶段名称以匹配。既然已经在这里进行了一些 косметические 更改,也将 "DONE" 重命名为 "FREE"。这与 "ALLOCATE" 匹配得更好,并且描述了该阶段实际发生的活动(正如我们对其他阶段所做的那样),而不是描述状态。在 bugfix commit 3b8981b6 将该阶段分为两部分后,区别更加明显。至于增长屏障,将其 "ALLOCATE" 阶段重命名为 "REALLOCATE",这可能是对其发生情况的更好描述。同时还改进了关于阶段的注释。讨论:https://postgr.es/m/CA%2BhUKG%2BMDpwF2Eo2LAvzd%3DpOh81wUTsrwU1uAwR-v6OGBB6%2B7g%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/378802e3713c6c0fce31d2390c134cd5d7c30157
撤销 "修复并行哈希连接批次清理中的竞态条件"。这撤销了 commit 378802e3713c6c0fce31d2390c134cd5d7c30157。这撤销了 commit 3b8981b6e1a2aea0f18384c803e21e9391de669a。讨论:https://postgr.es/m/CA%2BhUKGJmcqAE3MZeDCLLXa62cWM0AJbKmp2JrJYaJ86bz36LFA%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/7f7f25f15edb6eacec58179ef5285e874aa4435b
提供 recovery_init_sync_method=syncfs。自 commit 2ce439f3 起,我们在崩溃恢复开始时打开数据目录中的每个文件并调用 fsync()。如果文件很多,这可能会非常慢,导致现场抱怨系统需要几分钟甚至几小时才能开始崩溃恢复。提供一种替代方法(仅限 Linux),其中我们在数据目录下的每个可能不同的文件系统上调用 syncfs()。这等效,但避免了从可能慢的存储中调入大量 inode。新模式带有一些文档中描述的注意事项,因此新设置的默认值为 "fsync",保留了旧的行为。报告者:Michael Brown michael.brown@discourse.org 评审者:Fujii Masao masao.fujii@oss.nttdata.com 评审者:Paul Guo guopa@vmware.com 评审者:Bruce Momjian bruce@momjian.us 评审者:Justin Pryzby pryzby@telsasoft.com 评审者:David Steele david@pgmasters.net 讨论:https://postgr.es/m/11bc2bb7-ecb5-3ad0-b39f-df632734cd81%40discourse.org 讨论:https://postgr.es/m/CAEET0ZHGnbXmi8yF3ywsDZvb3m9CbdsGZgfTXscQ6agcbzcZAw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/61752afb26404dfc99a535c7a53f7f04dc110263
Tom Lane 提交
处理 MinGW-64 的 setjmp/longjmp 支持中的问题。很难不认为 MinGW-64 上的 setjmp/longjmp 有问题,因为我们看到在与我们自己的代码完全无关的更改后,失败现象时有时无。其他项目(如 Ruby)已放弃并在该平台上使用 gcc 的 setjmp/longjmp 内建函数;此补丁只是遵循这一做法。请注意,对于包含 setjmp 或 longjmp 的函数,这是一个相当根本的 ABI 更改,所以我们真的不能考虑回溯。根据 Regina Obe 和 Heath Lord 的报告,以及最近在构建农场成员 walleye 上的失败,以及在 fairwren 上的较早失败。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 实现都具有它。如果构建农场持有不同意见,我们可以稍微复杂化测试以避免要求这一点。可能应该回溯此操作,但我不能确定它是否能在 d66b23b03 之前在 Windows 上正常工作。https://git.postgresql.org/pg/commitdiff/081876d75ea15c3bd2ee5ba64a794fd8ea46d794
防止 read_tablespace_map() 中的缓冲区溢出。Trustwave 的 Robert Foggia 报告称 read_tablespace_map() 未能防止其堆栈上输入缓冲区溢出。由于假定表空间映射文件是可信的,因此这似乎不是一个有趣的严重安全漏洞,但为了健壮性,我们仍应修复它。在此期间,记录 pg_basebackup 的 --tablespace-mapping 选项不适用于 tar 格式输出,因为它确实不适用。要使其工作,我们需要修改服务器发送的 tar 包内的 tablespace_map 文件,这可能是可能的,但我不会主动去做。(更不痛苦的解决方案需要更改 basebackup 协议,以便源服务器可以调整映射。这也不太令人满意。)https://git.postgresql.org/pg/commitdiff/a50e4fd028a1ece2b1a04df2c9ae6581783e9eef
代码审查服务器对 "表空间映射" 文件处理的情况。在查看 Robert Foggia 的报告时,我注意到该区域存在一系列其他问题。
路径名中用于反斜杠引用换行符的方案是错误的;如果路径名中最后一个普通字符是反斜杠,它将出错。我不确定为什么我们要允许表空间路径中出现换行符,但如果我们要这样做,就应该在不引入其他问题的情况下进行。因此,反斜杠本身也必须进行反斜杠引用。* 作者没有仔细阅读 sscanf 手册页,因为这段代码会丢弃路径中的任何前导空格。(我怀疑在实践中可能出现带有前导空格的表空间路径;但如果我们费心允许路径中出现换行符,那么前导空格的出现似乎同样不太可能。)使用 sscanf 来查找第一个空格的这项任务,无论如何都显得大材小用。* 虽然我不能 100% 确定转义 \r 和 \n 的理由是什么,但如果目的是允许 Windows 换行符出现在文件中,那么这段代码就失败了,因为它会在看到 \r 后跟 \n 时抛出错误。* 没有对映射文件中不完整的最后一行进行交叉检查,而这可能是由于不正确的转义错误引起的常见症状。在生成端,除了转义问题外,我们还有:* 如果 needtblspcmapfile 为 true,则 do_pg_start_backup 将在 tablespaceinfo->path 值中返回转义的字符串,这是任何调用者都不想要或准备处理的。我不确定这是否是一个活动的 bug,但它看起来可能(鉴于没人实际在表空间路径中使用换行符的粗略假设)。* 它没有对 pg_tblspc 目录中随机内容的可能性进行严格检查。IMO,我们应该忽略任何没有 OID 样名称的内容。转义规则更改似乎不适合回溯:它将需要表空间映射文件中的反斜杠翻倍,这基本上是 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 不可能变为空,因此没有实际的 bug --- 但某些编译器对此发出了警告。疏忽在 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 词缀,因为 regex 库处理的是普通的 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 hook 检查中的错误退出未能清除建议值字符串,而 ProcessGUCArray() 中的错误退出未能清除 ParseLongOption() 的 malloc 结果。通过 valgrind 测试发现。此问题已存在很长时间,因此回溯到所有支持的分支。讨论:https://postgr.es/m/3816764.1616104288@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/377b7a83007d277d32ef19f7c7590c8668d504cb
盲目尝试修复 MSYS 的 Perl 脚本的 tar 调用。构建农场成员 walleye 不喜欢我在 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 的后续问题,但我正在快速推进这部分,因为我们需要看看这是否足以让构建农场的跨版本升级测试满意。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,这并没有帮助。根据构建农场。 https://git.postgresql.org/pg/commitdiff/9fb9691a88ae8df9bc30e0f0f72de7c96e73e125
Álvaro Herrera 提交
在 libpq 中实现管道模式。libpq 中的管道模式允许应用程序避免 FE/BE 协议中的 Sync 消息,这些消息在旧 libpq API 中每个查询后都隐含存在。然后,应用程序可以通过新的 libpq 函数 PQpipelineSync 随时插入 Sync。这可以显着降低查询延迟。合著者:Craig Ringer craig.ringer@enterprisedb.com 合著者:Matthieu Garrigues matthieu.garrigues@gmail.com 合著者:Álvaro Herrera alvherre@alvh.no-ip.org 评审者:Andres Freund andres@anarazel.de 评审者:Aya Iwata iwata.aya@jp.fujitsu.com 评审者:Daniel Vérité daniel@manitou-mail.org 评审者:David G. Johnston david.g.johnston@gmail.com 评审者:Justin Pryzby pryzby@telsasoft.com 评审者:Kirk Jamison k.jamison@fujitsu.com 评审者:Michael Paquier michael.paquier@gmail.com 评审者:Nikhil Sontakke nikhils@2ndquadrant.com 评审者:Vaishnavi Prabakaran VaishnaviP@fast.au.fujitsu.com 评审者:Zhihong Yu zyu@yugabyte.com 讨论:https://postgr.es/m/CAMsr+YFUjJytRyV4J-16bEoiZyH=4nj+sQ7JP9ajwz=B4dMMZw@mail.gmail.com 讨论:https://postgr.es/m/CAJkzx4T5E-2cQe3dtv2R78dYFvz+in8PY7A8MArvLhs_pg75gg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/acb7e4eb6b1c614c68a62fb3a6a5bba1af0a2659
为 pgbench 添加 libpq 管道模式支持。新的元命令 \startpipeline 和 \endpipeline 允许用户以 libpq 管道模式运行查询。作者:Daniel Vérité daniel@manitou-mail.org 评审者:Álvaro Herrera alvherre@alvh.no-ip.org 讨论:https://postgr.es/m/b4e34135-2bd9-4b8a-94ca-27d760da26d7@manitou-mail.org https://git.postgresql.org/pg/commitdiff/9aa491abbf07ca8385a429385be8d68517384fdf
(盲目)修复 Perl 对换行符的字符串分割。我忘了 Windows 用 \r\n 表示换行符,所以按 /\s/ 分割字符串会产生额外的空字符串。让我们将它重写为 /\s+/ 看看是否能避免这些。(其他脚本中有在 Windows 上使用该模式的先例。)之前:91bdf499b37b, 8ed428dc977f, 650b96707672。根据构建农场,来自 Tom Lane。讨论:https://postgr.es/m/3144460.1615860259@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/015061690c6526ff9f9f7af2940e1c1541654b68
修复 libpq 中的新内存泄漏。我在 commit 9aa491abbf07 中有所疏忽。根据 coverity。 https://git.postgresql.org/pg/commitdiff/2b526ed2e1cbaa54e5ad0c12d1294482f2757b17
Michaël Paquier 提交
为 COPY 的进度报告添加一些基本测试。这测试了 COPY 进度报告的一些基本功能,依赖于执行 COPY FROM(使用文件或 stdin)时触发的 INSERT 触发器,检查大小、处理的元组数和 WHERE 子句排除的元组数。作者:Josef Šimánek, Matthias van de Meent 评审者:Michael Paquier, Justin Pryzby, Bharath Rupireddy, Tomas Vondra 讨论:https://postgr.es/m/CAEze2WiOcgdH4aQA8NtZq-4dgvnJzp8PohdeKchPkhMY-jWZXA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/15639d5e8f6f278219681fec8a5668a92fb7e874
修复 indexing.c 中的注释。578b229 移除了对 WITH OIDS 的支持,并更改了 CatalogTupleInsert() 不再返回 Oid,但其中一个注释仍然提到这一点。作者:Vik Fearing 讨论:https://postgr.es/m/fef01975-ed10-3601-7b9e-80ecef72d00b@postgresfriends.org https://git.postgresql.org/pg/commitdiff/9fd2952cf4920d563e9cea51634c5b364d57f71a
改进 psql 中 IMPORT FOREIGN SCHEMA 的制表符补全 (\h)。仅 "IMPORT" 显示为补全结果,而 IMPORT FOREIGN SCHEMA 是唯一在首位使用此关键字的命令。这将命令补全更改为显示完整的命令名称,而不仅仅是 "IMPORT"。评审者:Georgios Kokolatos, Julien Rouhaud 讨论:https://postgr.es/m/YFL6JneBiuMWYyoh@paquier.xyz https://git.postgresql.org/pg/commitdiff/5b2266e33fc74142d23685bdf54f64ad598fbdea
Stephen Frost 已推送
为 ANALYZE 使用预取。当 posix_fadvise() 可用时,通过使用它来通知内核我们要请求的块,可以显着提高 ANALYZE 的性能。与位图索引扫描类似,预取的缓冲区数量基于 maintenance_io_concurrency 设置(对于特定表空间,或未设置时,全局设置,通过 get_tablespace_maintenance_io_concurrency())。评审者:Heikki Linnakangas, Tomas Vondra 讨论:https://postgresql.ac.cn/message-id/VI1PR0701MB69603A433348EDCF783C6ECBF6EF0%40VI1PR0701MB6960.eurprd07.prod.outlook.com https://git.postgresql.org/pg/commitdiff/c6fc50cb40285141fad401321ae21becbaea1c59
改进自动 vacuum 和自动 analyze 的日志记录。在记录自动 vacuum 和自动 analyze 活动时,如果启用了 track_io_timing,则包含 I/O 定时。此外,对于自动 analyze,添加读取速率和脏速率,类似于自动 vacuum 过去的历史记录信息。Stephen Frost 和 Jakub Wartak 评审者:Heikki Linnakangas, Tomas Vondra 讨论:https://postgresql.ac.cn/message-id/VI1PR0701MB69603A433348EDCF783C6ECBF6EF0%40VI1PR0701MB6960.eurprd07.prod.outlook.com https://git.postgresql.org/pg/commitdiff/94d13d474dc61800e8a17cc1959c55815b050ecd
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 压缩,PostgreSQL 必须构建为 --with-lz4。总的来说,TOAST 压缩意味着对单个列值进行压缩,而不是整个元组,并且这些值可以内联在元组中进行压缩,然后存储在 TOAST 表中,因此这些属性也适用于此功能。在此提交之前,TOAST 指针在 va_extsize 字段中具有两个未使用的位,而压缩的数据在 va_rawsize 字段中具有两个未使用的位。这些位未使用是因为 varlena 的长度限制为 1GB;我们现在使用它们来指示使用的压缩类型。这意味着我们只有空间用于另外 2 种内置压缩类型,但如果需要,我们可以通过引入新的 vartag_external 值来处理我们最终想要添加的任何进一步类型。希望,提供多种算法的选择并不是很重要,因为我们添加的每一种算法不仅需要更多的编码,还为每个打包者增加了构建依赖。尽管如此,至少做到这一点似乎是值得的,因为 LZ4 在 CPU 使用量较少的情况下获得了比 PGLZ 更好的压缩效果。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 中的 use-after-ReleaseSysCache 问题。由 commit bbe0a81db69bd10bd166907c3701492a29aca294 引入。根据构建农场成员 prion。 https://git.postgresql.org/pg/commitdiff/d00fbdc431192c3e429b3e91c43d364e5c7ba680
Amit Kapila 提交
文档:为 pg_subscription 添加 substream 的描述。Commit 464824323e 添加了一个新列 substream 到 pg_subscription,但忘记更新文档。报告者:Peter Smith 作者:Amit Kapila 评审者:Peter Smith 讨论:https://postgr.es/m/CAHut+PuPGGASnh2Dy37VYODKULVQo-5oE=Shc6gwtRizDt==cA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/7efeb214ad832fa96ea950d0906b1d2b96316d15
修复 drop subscription 处理 tablesync 插槽时的竞态条件。Commit ce0fdbfe97 使 tablesync 插槽永久化,并允许 Drop Subscription 删除这些插槽。然而,表同步工作进程在收到插槽创建的确认之前,drop subscription 可能会停止它,这可能导致发布者上出现悬空插槽。防止在表同步工作进程中创建插槽时发生取消/死亡中断。报告者:Thomas Munro(根据构建农场)作者:Amit Kapila 评审者:Vignesh C, Takamichi Osumi 讨论:https://postgr.es/m/CA+hUKGJG9dWpw1cOQ2nzWU8PHjm=PTraB+KgE5648K9nTfwvxg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/6b67d72b604cb913e39324b81b61ab194d94cba0
添加新的 GUC 和 reloption 以启用并行模式下的插入。Commit 05c8482f7f 添加了 "INSERT INTO ... SELECT ..." 的并行 SELECT 实现,即使最终这些检查确定无法使用并行性,它也会产生不可忽略的额外并行安全性检查开销。这通常只在目标表具有大量分区的情况下才成问题。添加了一个新的 GUC 选项 "enable_parallel_insert",允许在并行模式下进行插入。默认值为开启。除了 GUC 选项外,用户可能还需要一个机制来在表级别以更精细的粒度允许并行模式下的插入。新的表选项 "parallel_insert_enabled" 允许这样做。默认为 true。作者:"Hou, Zhijie" 评审者:Greg Nancarrow, Amit Langote, Takayuki Tsunakawa, Amit Kapila 讨论:https://postgr.es/m/CAA4eK1K-cW7svLC2D7DHoGHxdAdg3P37BLgebqBOC2ZLc9a6QQ%40mail.gmail.com 讨论:https://postgr.es/m/CAJcOf-cXnB5cnMKqWEp2E2z7Mvcd04iLVmV=qpFJrR3AcrTS3g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c8f78b616167bf8e24bc5dc69112c37755ed3058
文档:更新并行插入 reloption 的描述。Commit c8f78b6161 添加了一个新的 reloption 以在并行模式下启用插入,但在文档的一个地方忘记更新了。顺便修正了同一 commit 中的一个拼写错误。报告者:Justin Pryzby 作者:Justin Pryzby 评审者:"Hou, Zhijie", Amit Kapila 讨论:https://postgr.es/m/20210318025228.GE11765@telsasoft.com https://git.postgresql.org/pg/commitdiff/ed62d3737c1b823f796d974060b1d0295a3dd831
Peter Eisentraut 提交
小的错误消息改进。https://git.postgresql.org/pg/commitdiff/e1ae40f381d0582981b1e63856bd4b060cfe2d53
将 lwlock-release 探针移回原位。文档明确说明 lwlock-release 在任何等待者被唤醒之前触发。在 ab5194e6f617a9a9e7aadb3dd1cee948a42d0755 之前,它一直那样工作,似乎在那里被意外放错了位置。将其移回原位。作者:Craig Ringer craig.ringer@enterprisedb.com 讨论:https://postgresql.ac.cn/message-id/CAGRY4nwxKUS_RvXFW-ugrZBYxPFFM5kjwKT5O+0+Stuga5b4+Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/96ae658e6238c5e69819fb1557c2c14a555506d8
Andres Freund 提交
Magnus Hagander 已推送
Tomáš Vondra 提交了
后端崩溃后删除临时文件。后端使用临时文件崩溃后,文件会保留下来,理由是这可能有助于调试。但我们没有收到任何用户报告实际这样做的,而且它意味着磁盘使用量可能会随着后端反复失败(甚至可能达到 ENOSPC)而增长。因此,这种行为有点不幸,修复它需要手动清理(删除文件,这容易出错)或重启实例(即服务中断)。这实现了临时文件的自动清理,由新的 GUC remove_temp_files_after_crash 控制。默认情况下会删除文件,但如果需要,可以禁用它以恢复旧行为。作者:Euler Taveira 评审者:Tomas Vondra, Michael Paquier, Anastasia Lubennikova, Thomas Munro 讨论:https://postgr.es/m/CAH503wDKdYzyq7U-QJqGn%3DGm6XmoK%2B6_6xTJ-Yn5WSvoHLY1Ww%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/cd91de0d17952b5763466cfa663e98318f26d357
实现 GROUP BY DISTINCT。使用 grouping sets 时,某些 grouping sets 可能是重复的。这在 CUBE 和 ROLLUP 子句中尤其常见。例如,GROUP BY CUBE (a,b), CUBE (b,c) 等同于 GROUP BY GROUPING SETS ( (a, b, c), (a, b, c), (a, b, c), (a, b), (a, b), (a, b), (a), (a), (a), (c, a), (c, a), (c, a), (c), (b, c), (b), () ) 其中一些 grouping sets 被计算了多次,这主要是没有必要的。此提交实现了 SQL 标准定义的新 GROUP BY DISTINCT 功能,该功能消除了重复的集合。作者:Vik Fearing 评审者:Erik Rijkers, Georgios Kokolatos, Tomas Vondra 讨论:https://postgr.es/m/bf3805a8-d7d1-ae61-fece-761b7ff41ecc@postgresfriends.org https://git.postgresql.org/pg/commitdiff/be45be9c33a85e72cdaeb9967e9f6d2d00199e09
修复 remove_temp_files_after_crash 的 TAP 测试。cd91de0d17 中包含的测试有两个简单的缺陷。首先,行数很少,在某些平台(例如 32 位)上,排序不需要磁盘排序,因此在这些机器上它没有测试自动删除。但是,测试失败了,因为没有临时文件,甚至连 base/pgsql_tmp 目录都没有创建。通过将行数增加到 5000 来修复,这应该在任何平台上都足够了。其次,测试使用简单的 sleep 来等待临时文件创建。这显然有问题,因为在慢速机器上(或使用 valgrind、CLOBBER_CACHE_ALWAYS 等),创建临时文件可能需要一段时间。但我们也希望测试运行得相对较快。通过依赖 UNIQUE 约束来修复,阻塞了创建临时文件的查询。作者:Euler Taveira 评审者:Tomas Vondra 讨论:https://postgr.es/m/CAH503wDKdYzyq7U-QJqGn%3DGm6XmoK%2B6_6xTJ-Yn5WSvoHLY1Ww%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/a16b2b960f0eec2fe367e86017b3c24ed688ba2b
修复 remove_temp_files_after_crash TAP 测试中的竞态条件。TAP 测试的编写方式是它没有等待正确的 SQL 命令,而是等待前一个命令的输出。这导致了竞态条件,允许命令以不同的顺序运行,而不是按预期阻塞等等。通过颠倒命令的顺序来修复,以便观察输出保证数据已正确插入,并等待锁出现在 pg_locks 中。讨论:https://postgr.es/m/CAH503wDKdYzyq7U-QJqGn%3DGm6XmoK%2B6_6xTJ-Yn5WSvoHLY1Ww%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/e589c4890b05044a04207c2797e7c8af6693ea5f
在 cmp_list_len_contents_asc 中使用 lfirst_int。在 be45be9c33 中添加的函数通过长度和内容比较整数列表(IntList),但存在两个错误。首先,它使用 intVal() 来提取值,但那是用于 Value 节点,而不是用于从 IntList 中提取 int 值。其次,它直接在 ListCell 上调用它,而没有执行 lfirst()。所以只使用 lfirst_int() 替代。有趣的是,这在构建农场上并没有导致任何崩溃,但 valgrind 正确地抱怨了它。讨论:https://postgr.es/m/bf3805a8-d7d1-ae61-fece-761b7ff41ecc@postgresfriends.org https://git.postgresql.org/pg/commitdiff/b822ae13ea93c18326d58d47829bbc66d36fae5c
在 brin_form_tuple 中使用有效的压缩方法。压缩 BRIN 摘要时,我们不能简单地使用索引属性的压缩方法。摘要可能使用不同的数据类型,例如固定长度的属性可能有 varlena 摘要,导致压缩失败。对于内置的 BRIN opclass,这恰好有效,因为摘要使用与属性相同的数据类型。当数据类型匹配时,我们可以继承使用为属性指定的压缩方法(它被复制到索引描述符中)。否则,我们别无选择,只能使用默认值。作者:Tomas Vondra 评审者:Justin Pryzby pryzby@telsasoft.com 讨论:https://postgr.es/m/e0367f27-392c-321a-7411-a58e1a7e4817%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/882b2cdc08c4100e273f24742e2118be98708a07
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 和 subxacts 添加到逻辑解码快照中的已提交事务列表中。
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 提交了四个补丁修订版,用于在请求立即关闭时,使统计信息收集器在不写入 statsfiles 的情况下关闭。
Mark Rofail 和 Andreas Karlsson 交换了补丁,用于实现外键数组。
Ajin Cherian、Peter Smith 和 Takamichi Osumi 交换了补丁,用于实现两阶段事务的逻辑解码。
Álvaro Herrera 提交了另外三个补丁修订版,用于实现 ALTER TABLE .. DETACH PARTITION CONCURRENTLY。
Amit Langote 发送了另一个版本的补丁,允许在跨分区更新期间批处理插入。
IIvan Panchenko 提交了另一个补丁修订版,用于添加登录触发器。
Peter Eisentraut 提交了另一个补丁修订版,使过程可以返回动态结果集。在过程中声明一个带有 WITH RETURN 的游标会使游标的数据作为 CALL 调用的结果返回。该过程需要声明 DYNAMIC RESULT SETS 属性。
Amit Kapila 提交了一个文档补丁,为 pg_subscription 添加 substream 的描述。
Amit Kapila 提交了一个补丁,用于在创建 tablesync 插槽时防止取消/死亡中断。
Bharath Rupireddy 提交了另一个补丁修订版,用于重构实现 REFRESH MATERIALIZED VIEW 的代码以提高可理解性。
Ranier Vilela 提交了一个补丁,用于处理重命名 Windows 文件时的边界情况。
Hou Zhijie 提交了另一个补丁修订版,以将安全检查扩展到支持并行插入 FK 关系,并跳过 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 过度谨慎。以前,如果页面上有剩余的未使用的行指针,即使页面上没有任何元组,对于足够大的新元组(超过 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' 参数,然后使用该参数替换 pg_utf8_verifystr(),有两个更快的实现:一个在 Intel 上使用 SSE-4.1 指令,另一个使用定制的备用函数,而不是依赖 pg_utf8_verifychar() 和 pg_utf8_isvalid()。这一个大致基于 simdjson 库中的备用函数。
Thomas Munro 提交了另一个补丁修订版,用于对 WAL 进行预取。
Peter Geoghegan 提交了一个补丁,用于添加一种方法,在使用 `git blame` 时忽略 pgindent 运行等。
Peter Eisentraut 提交了另一个补丁修订版,添加了 result_format_auto_binary_types 设置。
Fujii Masao 提交了另一个补丁修订版,用于将 WalReceiverWaitStart 等待事件的类型从 Client 更改为 IPC。
Marina Polyakova 提交了一个补丁,通过允许并发加载 WAL 文件来减少从归档恢复数据库所需的时间。
Peter Eisentraut 提交了另一个补丁修订版,用于实现 SQL 标准函数体。
Andrei Zubkov 提交了一个补丁,用于更正 pg_stat_statements 中的 deallocation 事件计数。
James Coleman 提交了另一个补丁修订版,用于改进 standby 连接被拒绝的错误消息。目前,当 standby 完成启动但 hot_standby 配置为 off 时,客户端连接时的错误消息是 "the database system is starting up",这会不必要地令人困惑(而且实际上也不太准确)。取而代之的是发送一个有用的错误消息,让用户立即知道服务器配置为拒绝这些连接。
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 索引签名的 xor 操作,并避免 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 提交了另一个补丁修订版,用于实现内置连接池。