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

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

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

祝贺新核心团队成员 Andres Freund 和 Jonathan Katz!https://postgresql.ac.cn/developer/core/

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

PostgreSQL 产品新闻

phpPgAdmin 7.13.1 发布,这是一个用于 PostgreSQL 的基于 Web 的管理工具。https://xzilla.net//blog/2020/Nov/phpPgAdmin-7-13-1-released.html

Ajqvue 3.3 版本发布,这是一个支持 PostgreSQL 的基于 Java 的 UI。http://ajqvue.com

pg_statement_rollback 扩展发布,该扩展添加了服务器端事务,可以在语句级别回滚。https://github.com/lzlabs/pg_statement_rollback/releases/

11 月的 PostgreSQL 工作

http://archives.postgresql.org/pgsql-jobs/2020-11/

PostgreSQL 新闻

Planet PostgreSQL:http://planet.postgresql.org/

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

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

已应用的补丁

Tom Lane 推送了

  • 修复了 TOAST 解压缩中的两个问题。pglz_maximum_compressed_size() 可能低估了生成 N 字节解压缩数据所需的压缩数据量;这是 commit 11a078cf8 中的一个错误。除此之外,pglz_decompress() 未能保护自身免受损坏的压缩数据的影响,特别是在匹配标签中 off == 0 时。commit c60e520f6 将这种情况变成了一个无限循环,而以前只会导致垃圾输出。这两个 bug 的组合似乎可以解释 Tom Vijlbrief 提出的 bug #16694,但如果没有对失败会话进行直接检查,则无法完全确定。(需要假设 pglz_maximum_compressed_size() bug 导致我们未能获取匹配标签的第二个字节,而碰巧在那里的是一个零。如果没有 off == 0,则很难解释报告的无限循环。)除了修复 bug 之外,还重写了相关注释以使其更清晰。回溯到这两个提交所在的位置 v13。讨论:https://postgr.es/m/16694-f107871e499ec114@postgresql.org https://git.postgresql.org/pg/commitdiff/dfc797730fc7a07c0e6bd636ad1a564aecab3161

  • 关于 TOAST 解压缩的第二次思考。在检测到损坏的匹配标签时,pglz_decompress() 应该直接返回 -1。像我在 dfc797730 中所做的那样跳出循环,并不能完全保证会发生这种情况。此外,我们可以在该检查中使用 unlikely(),以防万一它有所帮助。像之前的补丁一样,回溯到 v13。https://git.postgresql.org/pg/commitdiff/fd2997565c6f66837440dd57f5e52b56aa964d14

  • 重新思考 fmgroids.h 宏的生成规则。传统上,pg_proc OID 的 fmgroids.h 宏的名称是从 prosrc 字段构造的。但有时同一个 C 函数是多个 pg_proc 条目的基础,迫使我们任意选择引用哪个 OID;然后,其他条目无法通过 fmgroids.h 命名。此外,我们不能为不是 C 编码函数的 pg_proc 条目使用宏。相反,使用 proname 字段,如果 proname 不是唯一的,则附加 proargtypes 字段(将参数间的空格替换为下划线)。对 F_OIDEQ 等唯一条目进行特殊处理,无需更改大量代码。事实上,我只能在树中找到两个需要调整的地方;虽然这更改了 fmgroids.h 中的相当多的现有条目,但很少有 C 代码引用它们。使用此补丁,pg_proc.dat 中的所有条目在 fmgroids.h 中都有宏。讨论:https://postgr.es/m/472274.1604258384@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/8e1f37c07aafd4bb7aa6e1e1982010af11f8b5c7

  • 删除对 pg_rewrite.ev_qual 和 ev_action 为 NULL 的特殊检查。make_ruledef() 和 make_viewdef() 被编码为处理这些列可能为 null 的情况,但它们已被标记为 BKI_FORCE_NOT_NULL 一段时间了。因此,实际上没有必要做比我们对 pg_rewrite 的其他列所做的更多的事情,即只断言我们得到了非 null 的结果。(有一种观点认为,断言不是检查损坏数据的方式,但如果我们想要这样的策略,这里肯定不是开始的地方。)此外,删除 make_ruledef() 中对空操作列表的长期失效的处理。这是一个错误情况,应该被视为这样。(DO INSTEAD NOTHING 由 CMD_NOTHING 查询表示,而不是空列表;参考 transformRuleStmt。)Kyotaro Horiguchi,我做了一些更改 讨论:https://postgr.es/m/CAEudQApoA=tMTic6xEPYP_hsNZ8XtToVThK_0x7D_aFQYowq3w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e1339bfc7a2fd4629e1c3f8f919ddd05b4745e13

  • 修复 pg_hba_file_rules 视图中 getnameinfo() 的不可移植用法。fill_hba_line() 认为它可以传递 sizeof(struct sockaddr_storage) 而不是先前由 getaddrinfo() 返回的实际 addrlen。虽然这似乎在许多平台上都有效,但在 FreeBSD 11 上却无效:你会得到一个失败,这会导致视图在所有行中为地址和网络掩码列显示 NULL。getnameinfo() 的 POSIX 规范在这里很明显地支持 FreeBSD:你应该传递实际的地址长度。因此,似乎有可能在其他平台上这种编码也会失败,而我们只是没有注意到。此外,我认为 getnameinfo() 失败会导致 NULL 输出本身就是相当虚假的。我们的 pg_getnameinfo_all() 包装器在失败时会小心地发出 "???",我们应该在这些情况下使用它。NULL 应该仅在没有 IP 地址的行中发出。根据 Peter Vandivier 的 bug #16695。回溯到添加此代码的 v10。讨论:https://postgr.es/m/16695-a665558e2f630be7@postgresql.org https://git.postgresql.org/pg/commitdiff/0a4b34031279d938c2e59df8df7159d6c11e39b5

  • 允许具有 BYPASSRLS 的用户更改他们自己的密码。commit 491c029db 中的意图是要求超级用户才能更改 BYPASSRLS 属性,但 AlterRole() 中编码的实际效果是要求超级用户才能更改 BYPASSRLS 角色的任何内容。BYPASSRLS 角色的其他属性应该按照与正常角色相同的规则进行更改。修复该问题,并处理与 BYPASSRLS 和 REPLICATION 角色属性相关的一些文档遗漏。Tom Lane 和 Stephen Frost,根据 Wolfgang Walther 的 bug 报告。回溯到所有受支持的分支。讨论:https://postgr.es/m/a5548a9f-89ee-3167-129d-162b5985fcf8@technowledgy.de https://git.postgresql.org/pg/commitdiff/d907bd0543aa63e59653d7345840bed0f8b3a83b

  • 改进围绕 REPLICATION 和 BYPASSRLS 属性的错误消息。按照 Wolfgang Walther 的建议,澄清措辞。不回溯;这似乎不值得在后向分支中删除可翻译的字符串。Tom Lane 和 Stephen Frost 讨论:https://postgr.es/m/a5548a9f-89ee-3167-129d-162b5985fcf8@technowledgy.de https://git.postgresql.org/pg/commitdiff/17fb60387ce3fdc2bbb13d9b67bed0e4da77e173

  • 防止来自未初始化子计划的核心转储。如果计划程序错误地将非并行安全的子计划放入查询树的并行化部分,nodeSubplan.c 将在工作进程中失败,因为它在 es_subplanstates 中找到一个 null,它无法处理。似乎值得进行一次测试和 elog,使其成为错误情况而不是核心转储情况。这可能应该包含在 commit 16ebab688 中,该 commit 负责允许 null 最初出现在 es_subplanstates 中。因此,回溯到出现该情况的 v10。讨论:https://postgr.es/m/924226.1604422326@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/92f87182f2c617fd420832972b6d0ae4527301c8

  • 从 fmgrtab.c 中删除聚合函数的无用条目。Gen_fmgrtab.pl 将聚合函数视为与其他内置函数相同,这是浪费的,因为实际上没有必要在 fmgr_builtins[] 表中为它们设置条目。抑制这些条目可以在我的计算机上节省大约 3KB 的编译表空间;这虽然不多,但考虑到该表非常“热门”,这也并非无关紧要。唯一需要的外部代码更改是,ExecInitWindowAgg() 不得调用普通聚合函数的 fmgr_info_cxt()。但这无论如何都节省了一些周期。完成此操作后,aggregate_dummy() 函数将不被引用,并且可以删除。现在,使用 "aggregate_dummy" 作为聚合的 prosrc 值只是一种文档约定,而不是重要的东西。有人讨论过使用 NULL 来节省 pg_proc 中的几个字节,但我们必须删除 prosrc 的 BKI_FORCE_NOT_NULL 标记,这似乎不是一个好主意。无论如何,有可能有客户端代码期望在那里看到 "aggregate_dummy",所以我不想在没有充分理由的情况下更改它。讨论:https://postgr.es/m/533989.1604263665@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/f21636e5d5b8394ed076e18ddc5f4ba710c69c99

  • 改进我们对 SQL 语法函数调用的复述能力。SQL 规范针对某些函数调用规定了非标准语法,例如,带有数字位置信息的 substring() 应该拼写为“SUBSTRING(string FROM start FOR count)”。我们接受许多此类语法,但到目前为止不会以相同格式打印它们,而是简化为“substring(string, start, count)”。这一点一直让我很恼火,因为它造成了互操作性问题:我们无缘无故地将 PostgreSQL 特有的语法注入到原本可能完全符合规范的视图定义中。然而,现在解决这个问题的真正原因是支持计划中的 EXTRACT()(又名 date_part())语义更改。当我们将其切换为返回数值时,解析器会将 EXTRACT() 转换为一些新的函数名称(如果你问我,不妨就叫“extract”),然后教导 ruleutils.c 按照 SQL 规范反向列出该名称。这样,对 date_part() 的现有调用将继续具有旧的语义。为了实现这一点,我们发明了一个新的 CoercionForm 值 COERCE_SQL_SYNTAX,并在输入具有 SQL 规范修饰时,让解析器插入该值而不是 COERCE_EXPLICIT_CALL。(但如果输入是普通函数调用的形式,则继续将其标记为 COERCE_EXPLICIT_CALL,即使它正在调用这些函数之一。)然后,ruleutils.c 将 COERCE_SQL_SYNTAX 识别为发出 SQL 调用语法的提示。它可以利用关于可以这样调用的函数的硬编码知识来知道发出哪些修饰。(虽然这个解决方案在没有手动添加的情况下是不可扩展的,但语法也不是,所以这看起来不是不可维护的。)请注意,只有当函数调用以 SQL 修饰的形式输入时,此解决方案才会反向列出它;因此,转储和重载本身不会导致视图外观发生任何变化。这需要向 struct FuncCall 添加一个 CoercionForm 字段。(我忍不住在添加这个字段的同时稍微重新排列了一下该结构体的字段顺序。)FuncCall 不会出现在存储的规则中,因此该更改不是 catversion 升级的原因,但我仍然做了一个,因为 CoercionForm 字段的新枚举值可能会混淆旧的后端代码。未来可能的工作: * 也许现在应该将 CoercionForm 重命名为 DisplayForm 或其他类似名称,以反映其更通用的含义。这将需要修改数百个地方,因此不确定是否值得进行代码改动。 * SQLValueFunction 节点类型(其发明的部分目的也是为了提高视图输出的 SQL 兼容性)或许可以用标记为 COERCE_SQL_SYNTAX 的常规函数调用来代替。然而,尚不清楚这是否会节省代码。讨论:https://postgr.es/m/42b73d2d-da12-ba9f-570a-420e0cce19d9@phystech.edu https://git.postgresql.org/pg/commitdiff/40c24bfef92530bd846e111c1742c2a54441c62c

  • 使用 anycompatible 而不是 anyelement 声明 lead() 和 lag()。这允许使用与数据列类型不完全匹配的“默认”表达式。以前你会得到类似“function lag(numeric, integer, integer) does not exist”这样的错误,这不仅没有帮助,而且还具有误导性。SQL 规范建议将默认值强制转换为数据列的类型,但此实现选择公共超类型,这似乎至少是合理的。(注意:我借此机会在 pg_proc.dat 上运行了“make reformat-dat-files”,因此此提交包含对最近添加的条目的一些外观更改,这些更改与 lead/lag 无关。)Vik Fearing 讨论:https://postgr.es/m/77675130-89da-dab1-51dd-492c93dcf5d1@postgresfriends.org https://git.postgresql.org/pg/commitdiff/5c292e6b90433c760a3e15027646c7b94afd0cdd

  • 使用 anycompatible 而不是 anyelement 声明各种数组函数。转换 array_append、array_prepend、array_cat、array_position、array_positions、array_remove、array_replace 和 width_bucket 以使用 anycompatiblearray。这是对 commit 5c292e6b9 的简单扩展,以解决其他一些通过这样做可以明显提高可用性的地方。理想情况下,我们还会修改其他采用多个旧式多态参数的函数。但是其余的大部分都与一个或多个运算符类绑定在一起,这使得任何此类更改都比我现在想要打开的更大的一团糟。讨论:https://postgr.es/m/77675130-89da-dab1-51dd-492c93dcf5d1@postgresfriends.org https://git.postgresql.org/pg/commitdiff/9e38c2bb5093ceb0c04d6315ccd8975bd17add66

  • 删除浮点数除以无穷大除数时的下溢错误。float4_div 和 float8_div 对于零除以无穷大正确地产生零,但对于非零有限值除以无穷大则抛出下溢错误。这似乎是错误的;至少它与最近为数值无穷大实现的行为不一致。删除该错误并允许返回零。此补丁还删除了这些函数中溢出检查中无用的 isinf() 测试(非无穷大除以无穷大不能产生无穷大)。从较大的补丁中提取;这在几何运算符的上下文中似乎很重要,因此它值得单独提交。Kyotaro Horiguchi 讨论:https://postgr.es/m/CAGf+fX70rWFOk5cd00uMfa__0yP+vtQg5ck7c2Onb-Yczp0URA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/fac83dbd6fe1ac3d4125bfa39f287f95bffe6cda

  • 不要对自引用视图上的 LOCK TABLE 抛出错误。自从我们在 v11 中使其递归到视图以来,LOCK TABLE 在应用于自引用视图时会抱怨“无限递归”。然而,这打破了 pg_dump 的新假设,即锁定每个关系都是可以的。似乎没有任何充分的理由抛出错误:如果我们只是放弃递归,我们仍然满足了锁定每个引用关系的的要求。根据 Andrew Bille(通过 Alexander Lakhin)提供的 bug #16703。讨论:https://postgr.es/m/16703-e348f58aab3cf6cc@postgresql.org https://git.postgresql.org/pg/commitdiff/5b7bfc39726ff9f6c52dd73e337c34e74e0d1f39

  • 还原“pg_dump:锁定所有关系,而不仅仅是普通表”。在所有分支中还原 403a3d91c 以及后续修复 7f4235032。我们需要更仔细地考虑 LOCK TABLE 在视图上的行为应该是什么,而且在下周的发布之前没有时间这样做。我们稍后会再试一次。讨论:https://postgr.es/m/16703-e348f58aab3cf6cc@postgresql.org https://git.postgresql.org/pg/commitdiff/d3adaabaf7d555ec8bb1d83c43f72e79f1bf0b7d

  • 还原“在 LOCK TABLE 中接受任何类型的关系”。在所有分支中还原 59ab4ac32 以及后续修复 33862cb9c。我们需要更仔细地考虑 LOCK TABLE 在视图上的行为应该是什么,而且在下周的发布之前没有时间这样做。我们稍后会再试一次。讨论:https://postgr.es/m/16703-e348f58aab3cf6cc@postgresql.org https://git.postgresql.org/pg/commitdiff/eeda7f6338095701cfe1ba3da37070508efe019e

  • 修复 ecpg 对 B'...' 和 X'...' 字面量的处理错误。这些在多个方面被破坏: * xbstart 和 xhstart 词法分析器操作在转换到 xb/xh 状态之前忽略了设置“state_before_str_start”,因此可能导致稍后出现“内部错误:不可到达状态”。 * 在 xb 状态末尾对有效字符串内容的测试完全错误,因为它错误地计算了 xbstart 操作注入的“b”前缀。同时,xh 状态根本没有这样的检查。 * 生成的字面量值未能包含任何引号。 * 语法无论如何都做了错误的事情,通常忽略字面量值并发出其他内容,因为 BCONST 和 XCONST 标记的处理方式与 SCONST 标记的处理方式随机不同。第一个问题显然是 commit 7f380c59f 中的一个疏忽,但其他问题似乎非常古老。缺乏抱怨表明 ECPG 用户没有过多地使用这些语法(虽然我确实模糊地记得之前的一个抱怨)。按照编写方式,此补丁依赖于 7f380c59f,因此它不能回溯到 v13 之前。考虑到缺乏抱怨,我对将补丁调整到先前的分支没有兴趣。Shenhao Wang 报告和补丁(测试用例由我调整) 讨论:https://postgr.es/m/d6402f1bacb74ecba22ef715dbba17fd@G08CNEXMBPEKD06.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/1e3868ab3bef5cfa0f4d44a6937a880be7a3a482

  • 避免在新 ecpg 测试用例中重用输出变量。buildfarm 认为这会导致内存踩踏,尽管令人恼火的是我无法在此处复制它。strings.pgc 中的现有代码正在做一些文档根本不允许的事情,但我现在不愿意尝试使其更好。我们只需声明更多输出变量,希望能够解决这个问题。https://git.postgresql.org/pg/commitdiff/eed4356fad84b0fd6e3caa49c7006f401159ac9a

David Rowley 推送

  • 允许在嵌套的 Append/MergeAppend 节点上进行运行时剪枝。之前,我们只对属于基本关系的 Append/MergeAppend 节点标记了必要的信息,以便执行器执行运行时分区剪枝。我们认为嵌套的 Append/MergeAppend 节点几乎总是被拉到顶层的 Append/MergeAppend 中,因此为任何子 Append/MergeAppend 节点创建运行时剪枝信息是在浪费时间。然而,这可能是考虑不周的。我们无法拉起嵌套 Append/MergeAppend 的一些例子是:1) 并行 Append 节点,其并行和非并行路径混合到一个并行 Append 中。2) 当规划一个有序的 Append 扫描时,一个无序的子分区可能需要一个嵌套的 MergeAppend 路径,以确保子分区不会混淆馈入顶层 Append 的元组的顺序。不幸的是,这不仅仅是简单地删除 createplan.c 中故意不为除 RELOPT_BASEREL 关系以外的任何关系构建运行时剪枝信息的行。add_paths_to_append_rel() 中的代码对于包含在 Append/MergeAppend 路径中的 partitioned_rels 非常草率。那里的原始代码总是假设 accumulate_append_subpath() 会将每个子 Append 和子 MergeAppend 路径拉到顶层路径中。虽然记录额外的分区表 RT 索引似乎没有造成任何实际的错误,但这确实意味着在规划的后期,当我们构建运行时剪枝信息时,我们浪费了精力,为我们没有子路径供执行器运行时剪枝的分区表构建了 PartitionedRelPruneInfos。这里我们加强了这一点,使 partitioned_rels 只包含给定 Append/MergeAppend 中实际有子路径的分区表的 RT 索引。我们现在可以断言每个 PartitionedRelPruneInfo 都有一个非空的 present_parts。这应该允许我们捕获任何遗漏的奇怪的角落情况。顺便说一句,似乎不再有充分的理由让 AppendPath 和 MergeAppendPath 的 partitioned_rel 字段成为 IntList 的列表。我们可以简单地使用 Relids 的列表。这在内存中更紧凑,并且可以更快地添加新成员。我们仍然知道哪个是根级分区,因为这些分区的 relid 总是比它们的子分区低。以前,这个字段用于更多的事情,但运行时分区剪枝现在仍然是它的唯一用途,它不需要 IntLists 的列表。这里我们也去掉了 RelOptInfo 的 partitioned_child_rels 字段。这正是之前(有时不正确地)用于设置 Append/MergeAppend 路径的 partitioned_rels 字段的。这是该字段的唯一用法,所以我们可以放心地将其删除。我也不禁更改了一些附近的代码,以利用新添加的 for_each_from 宏,这样我们就可以跳过列表中的第一个元素,而无需在每次迭代时检查当前项是否是第一个。Andreas Kretschmer 的一个错误报告促成了所有这些工作,然而,经过一些考虑,我个人并不认为这是一个错误修复。所以没有反向移植。在 Andreas 的测试用例中,由于顶层 Append 只有一个子路径被拉高了一级,根据 8edd0e794,所以嵌套的 Append 并不那么明显。作者:David Rowley 审核人:Amit Langote 讨论:https://postgr.es/m/flat/CAApHDvqSchs%2BubdybcfFaSPB%2B%2BEA7kqMaoqajtP0GtZvzOOR3g%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/a929e17e5a8c9b751b66002c8a89fdebdacfe194

  • 修复不稳定的 partition_prune 回归测试。这最近被 a929e17e5 破坏了。我忘记了并行测试应该通过 explain_parallel_append 函数运行它们的 EXPLAIN 输出,以便在并行工作进程启动失败时输出是稳定的。fairywren 是第一个注意到这一点的。报告人:Michael Paquier 讨论:https://postgr.es/m/20201102062951.GB15770@paquier.xyz https://git.postgresql.org/pg/commitdiff/90d8f1b1826ce076a502a43fe7c88423b46c6349

Amit Kapila 推送了

米迦勒·帕基耶推送了

Heikki Linnakangas 推送了

Thomas Munro 推送

Magnus Hagander 推送

Peter Eisentraut 推送

Tomáš Vondra 推送

藤井 正雄 推送

Peter Geoghegan 推送

  • 修复 nbtree 仅清理 VACUUM 统计信息不准确的问题。用于计算来自发布列表元组的堆 TID 的逻辑(由提交 0d861bbb 添加)存在缺陷。在未设置回调的情况下,它不会计算任何 TID/索引元组。这意味着我们在仅清理的 VACUUM 中错误地计算了没有索引元组,这可能导致 pg_class.reltuples 在受影响的索引中被虚假地设置为 0。为了修复,在没有回调的情况下,返回到从页面中计数项目。这种方法不是很准确,但在实践中效果足够好,同时避免了在仅清理的 VACUUM 期间访问每个索引元组的开销。作者:Peter Geoghegan pg [AT] bowt.ie 报告人:Jehan-Guillaume de Rorthais jgdr [AT] dalibo.com https://postgr.es/m/20201023174451.69e358f1@firost 回溯:13-,其中引入了 nbtree 去重 https://git.postgresql.org/pg/commitdiff/48e1291342dd7771cf8c67aa1d7ec1f394b95dd8

  • 修复 wal_consistency_checking nbtree 错误。wal_consistency_checking 指出在某些涉及 nbtree 页面删除的情况下存在不一致。根本问题在于,在 REDO 例程运行后生成的页面映像与原始执行后的相应页面映像之间存在细微差异。这种无害的不一致已经存在很久了。我们现在或多或少期望即使在已删除的 nbtree 页面之间也保持完全一致,因此这不再可以接受。为了修复,调整 REDO 例程以匹配原始执行。提交 f47b5e13 中的疏忽。 https://git.postgresql.org/pg/commitdiff/efc5dcfd8ad4e1df633025d8a91b64cd44d93f42

  • 改进 nbtree README 的 LP_DEAD 部分。提交 2ed5b87f 后,索引扫描如何设置 LP_DEAD 位设置的描述相当不清楚。稍微清理一下。还要在同一部分的开头参考 _bt_check_unique() 中的 LP_DEAD 位设置。这种机制实际上可能比该部分重点关注的通用 kill_prior_tuple 机制更重要,因此至少值得一提。 https://git.postgresql.org/pg/commitdiff/5a2f154a2ecaf545000a3ff3cdbadc76ae1df30a

Álvaro Herrera 推送

待处理的补丁

Nikhil Benesch 发送了一个补丁来支持 split_part() 函数中的负索引,这些负索引从数组末尾而不是开头计数。

Justin Pryzby 发送了另一个补丁修订版,以重构 CIC 以依赖 REINDEX CONCURRENTLY,重构相同内容以允许一次重新索引所有索引分区,并使 ReindexPartitions() 设置 indisvalid,以便稍后进入的内容可以看到它们已准备就绪。

Magnus Hagander 发送了另一个补丁修订版,以从 pg_upgrade 中删除过时的 analyze_new_cluster.sh 脚本以及了解它的内容。

Anastasia Lubennikova 发送了另一个补丁修订版,以教 COPY FREEZE 设置 PD_ALL_VISIBLE 和可见性映射位。

David G. Johnston 发送了另一个补丁修订版,以阐明信号函数没有反馈的事实。

Heikki Linnakangas 发送了四个补丁修订版,将 copy.c 分割为 copyto.c 和 copyfrom.c,并将 copyfrom.c 进一步分割为 copyfrom.c 和 copyfromparse.c。这将使处理分割文件中通常独立的功能更加方便和易于阅读。

Álvaro Herrera 发送了另一个补丁修订版,为 libpq 添加批量/管道支持。

Pavel Stěhule 发送了一个补丁,以减少 PL/pgSQL 中在非原子模式下执行 CALL 语句的开销。

Magnus Hagander 发送了两个补丁修订版,以删除 postgres 的过时 -O 开关,该开关曾经允许将选项传递给每个服务器进程。

Kyotaro HORIGUCHI 发送了另外两个补丁修订版,以修复 src/backend/storage/ipc/latch.c 中在 NULL 检查之前的解引用。

David Rowley 提交了两个修订版本的补丁,以减少在 Windows 上构建 contrib 模块的特殊情况。

Konstantin Knizhnik 提交了三个修订版本的补丁,为 libpq 添加自定义压缩功能。

Fabien COELHO 提交了另一个修订版本的补丁,为 pgbench 添加一个选项,该选项会延迟查询直到建立连接。

Thomas Munro 和 David Rowley 交换了补丁,以实现排序规则版本控制。

Jinbao Chen 提交了一个补丁,添加了一个新的表访问方法 ‘tid_visible’,用于测试 tid 的可见性。

Peter Geoghegan 提交了另一个修订版本的补丁,为 nbtree 添加删除重复数据的功能。

Stephen Frost 提交了两个修订版本的补丁,使用预取进行 ANALYZE 操作。

Tomáš Vondra 提交了另一个修订版本的补丁,使用 INT64_FORMAT 在排序调试中打印 int64 变量。

Bharath Rupireddy 提交了另一个修订版本的补丁,在 Create Table As 中使用多重插入。

Amit Langote 提交了另一个修订版本的补丁,从 ExecInitModifyTable 调用 BeginDirectModify,并延迟初始化结果关系信息。这项工作构建了基础设施,稍后将用于提高对外部表进行写入的效率。

Vigneshwaran C 提交了两个修订版本的补丁,通过添加包含 GSS 认证、加密和主体信息的日志消息,改进 GSS 认证/加密连接的连接授权消息。此消息将帮助用户了解是否使用了 GSS 认证或加密以及使用了哪个 GSS 主体。

Tomáš Vondra 提交了三个修订版本的补丁,以实现 BRIN 多范围索引。

Álvaro Herrera 提交了另一个修订版本的补丁,以实现 ALTER TABLE ... DETACH CONCURRENTLY。

Tsutomu Yamada 提交了另一个修订版本的补丁,在 psql 中添加 \dX,用于列出扩展统计信息。

Pavel Borisov 提交了两个修订版本的补丁,用于弃用和替换点的 <^>^ 操作符。

Melanie Plageman 提交了另一个修订版本的补丁,以支持并行 FULL JOIN 和 RIGHT JOIN。

Kyotaro HORIGUCHI 提交了两个修订版本的补丁,在统计收集器中使用共享内存而不是文件进行存储。

Ajin Cherian 和 Peter Smith 交换了补丁,以添加两阶段事务的逻辑解码。

Kirk Jamison 提交了另一个修订版本的补丁,通过避免在关系足够小或要失效的总块数低于完整扫描的阈值时扫描整个缓冲池,使 DropRelFileNodeBuffers() 在恢复期间更高效。

Daniel Gustafsson 提交了两个修订版本的补丁,以支持 NSS 作为 libpq 的 TLS 后端。

Takamichi Osumi 提交了三个修订版本的补丁,以实现 CREATE OR REPLACE TRIGGER。

Fujii Masao 提交了另一个修订版本的补丁,在 autoprewarm 进程中使用标准的 SIGHUP 和 SIGTERM 处理程序。

Justin Pryzby 提交了另一个修订版本的补丁,以实现分区表的 CLUSTER。这需要指定要集群的分区索引,或者先前已将分区索引设置为集群。

Kyotaro HORIGUCHI 提交了另一个修订版本的补丁,修复了一些几何操作符和函数中的 NaN 处理问题。

Michaël Paquier 提交了另一个修订版本的补丁,以重构 SHA2 API,将 sha2_openssl.c 切换为使用 EVP,并使 pgcrypto 对 EVP 使用核心资源所有者工具。

Yuzuko Hosoya 提交了另一个修订版本的补丁,以修复自动清理程序和分区表之间的一些不协调之处。

Justin Pryzby 提交了另一个修订版本的补丁,使 pg_ls_* 显示目录和共享文件集。

Seino Yuki 提交了另一个修订版本的补丁,使 pg_stat_statements 能够跟踪 REFRESH MATERIALIZED VIEW 处理的行。

Kyotaro HORIGUCHI 提交了两个修订版本的补丁,以实现 CatCache 过期。

David Pirotte 提交了另一个修订版本的补丁,为 pgoutput 添加逻辑解码消息。

Masahiko Sawada 提交了两个修订版本的补丁,以实现外部事务的事务管理器。

Masahiro Ikeda 提交了另一个修订版本的补丁,向 pg_stat_wal 视图添加统计信息。

Justin Pryzby 提交了一个补丁,在增量视图维护补丁之上,修复了一些文档问题。

Michaël Paquier 提交了一个补丁,重构了 MD5 实现,使其只有一个,并为 OpenSSL 切换到 EVP。

Justin Pryzby 提交了另一个修订版本的补丁,以阐明最小/最大 IO 的计算,特别是相关性的双重使用和影响,避免重用 “pages_fetched” 变量,并在成本计算位图扫描中像索引扫描一样使用相关性统计信息。

Sergei Kornilov 提交了另一个修订版本的补丁,允许使用重载更改一些恢复参数。

Marina Polyakova 提交了两个修订版本的补丁,修复了一个错误,该错误表现为 pgbench 不再支持 Windows 上的大量客户端连接。

Andrey Borodin 提交了另一个修订版本的补丁,为 gist_btree 类型的 GiST 构建添加排序支持。

Jürgen Purtz 和 Erik Rijkers 交换了补丁,为教程添加了一个架构章节。

Dilip Kumar 提交了另一个修订版本的补丁,以实现自定义表压缩方法。

Tomáš Vondra 提交了一个补丁,从 brin_memtuple_initialize 中删除了一些重复的代码。