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

PostgreSQL 周报 - 2020 年 11 月 8 日

发布于 2020-11-09 by 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 字节解压缩数据所需的压缩数据量;这是提交 11a078cf8 中的一个错误。与此分开的是,pglz_decompress() 未能保护自己免受损坏的压缩数据的影响,特别是匹配标签中的 off == 0。提交 c60e520f6 将这种情况变成了一个无限循环,而在此之前只会产生垃圾输出。这两个错误的组合似乎可以解释 Tom Vijlbrief 的 bug #16694,尽管在没有直接检查失败会话的情况下无法完全确定。(需要假设 pglz_maximum_compressed_size() 错误导致我们未能提取匹配标签的第二个字节,而那里碰巧是零。尽管很难解释 off == 0 的报告的无限循环。)除了修复错误之外,还重写了相关注释以提高清晰度。回填到这两个提交都已登录的 v13 版本。讨论:https://postgr.es/m/16703-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 Query 表示,而不是空列表;参见 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 一边:你应该传递实际的地址长度。因此,看起来其他平台上的这种编码也可能会失败,而我们只是没有注意到。此外,IMO 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 权限的用户更改自己的密码。提交 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

  • 防止因未初始化的子计划而导致核心转储。如果规划器错误地将非并行安全的 SubPlan 放入查询树的并行化部分,nodeSubplan.c 将在工作进程中失败,因为它会在 es_subplanstates 中找到一个 null,而它无法处理。值得为此进行测试和记录,将其作为错误情况而不是核心转储情况。这可能应该包含在提交 16ebab688 中,该提交负责允许 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)。这长期以来一直困扰我,因为它会造成互操作性问题:我们无意中将 Postgres 特定的语法注入到可能本来就是符合规范的视图定义中。然而,现在解决它的真正原因是支持 EXTRACT()(又名 date_part())语义的计划更改。当我们将它切换为返回 numeric 时,我们将让解析器将 EXTRACT() 翻译成一个新的函数名(如果问我,可能是“extract”),然后教 ruleutils.c 根据 SQL 规范反向列出它。这样,现有的 date_part() 调用将继续具有旧的语义。为了实现这一点,发明了一个新的 CoercionForm 值 COERCE_SQL_SYNTAX,并让解析器插入它,而不是 COERCE_EXPLICIT_CALL,当输入带有 SQL 规范修饰符时。 (但如果输入的形式是普通函数调用,则继续标记为 COERCE_EXPLICIT_CALL,即使它调用了这些函数之一。)然后 ruleutils.c 将 COERCE_SQL_SYNTAX 识别为发出 SQL 调用语法的提示。它可以使用硬编码的知识来知道哪些修饰符可以这样调用。(虽然此解决方案不能通过手动添加来扩展,但语法也不能,所以这似乎是可以维护的。)请注意,此解决方案仅在输入方式正确时才反向列出带有 SQL 修饰符的函数调用;因此,仅转储和重新加载本身不会产生视图外观的任何更改。这需要在 FuncCall 结构中添加一个 CoercionForm 字段。(我在进行此操作时,无法抗拒地稍微调整了该结构的字段顺序。)FuncCall 不出现在存储的规则中,因此此更改不应导致 catversion 增加,但我还是增加了一个,因为 CoercionForm 字段的新枚举值可能会使旧的后端代码混淆。未来的可能工作:* 可能 CoercionForm 现在应该重命名为 DisplayForm,或类似名称,以反映其更通用的含义。这需要修改几百个地方,所以不确定是否值得进行代码更改。* SQLValueFunction 节点类型,最初部分是为了改进视图输出的 SQL 兼容性而创建的,也许可以用标记为 COERCE_SQL_SYNTAX 的常规函数调用替换。但是,这是否会节省代码尚不清楚。讨论:https://postgr.es/m/4250be9d-da12-ba9f-570a-420e0cce19d9@phystech.edu https://git.postgresql.org/pg/commitdiff/40c24bfef92530bd846e111c1742c2a54441c62c

  • 将 lead() 和 lag() 声明为使用 anycompatible 而不是 anyelement。这允许使用一个“默认”表达式,该表达式不必严格匹配数据列的类型。以前你会得到类似“函数 lag(numeric, integer, integer) 不存在”的消息,这不仅无益,而且具有误导性。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。这是提交 5c292e6b9 的一个简单扩展,可以命中其他一些地方,从可用性角度来看,这样做有明显的收益。理想情况下,我们还应该修改其他接受多个旧式多态参数的函数。但其余大部分都与一个或多个运算符类相关联,使得任何此类更改都比我想打开的罐子要大得多。讨论:https://postgr.es/m/77675130-89da-dab1-51dd-492c93dcf5d1@postgresfriends.org https://git.postgresql.org/pg/commitdiff/9e38c2bb5093ceb0c04d6315ccd8975bd17add66

  • 移除浮点数除以无穷大时的下溢错误。float4_div 和 float8_div 正确地生成了零除以无穷大的结果为零,但对于非零有限值除以无穷大时抛出了下溢错误。这似乎是错误的;至少它与最近为 numeric 无穷大实现的行为不一致。移除错误并允许返回零。此补丁还移除了这些函数中溢出检查中无用的 isinf() 测试(非 Inf 除以 Inf 不会产生 Inf)。从一个较大的补丁中提取;这在几何运算符的上下文之外似乎很重要,因此它值得单独提交。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 的新假设,即锁定每个关系都是可以的。似乎没有充分的理由抛出错误:如果我们只是放弃递归,我们仍然满足了锁定每个被引用关系的要求。根据 bug #16703,由 Andrew Bille(经 Alexander Lakhin)报告。讨论: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 令牌随机不同。第一个问题显然是提交 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 节点上进行运行时修剪。以前,我们只标记了允许执行器为属于基本关系(base relations)的 Append/MergeAppend 节点执行运行时分区修剪所需的信息。人们认为嵌套的 Append/MergeAppend 节点几乎总是会被提升到顶层 Append/MergeAppend,并且为任何子 Append/MergeAppend 节点构建运行时修剪信息是浪费时间。然而,这可能是考虑不周。一些我们无法提取嵌套 Append/MergeAppends 的情况示例是:1)并行 Append 节点,其中混合了并行和非并行路径到 Parallel Append。2)计划有序 Append 扫描时,无序的子分区可能需要嵌套的 MergeAppend 路径,以确保子分区不会混淆输入到顶层 Append 的元组顺序。不幸的是,这并不像从 createplan.c 中删除那些专门不为 RELOPT_BASEREL 关系以外的任何内容构建运行时修剪信息那样简单。add_paths_to_append_rel() 中的代码对于它包含的 Append/MergeAppend 路径的 partitioned_rels 过于草率。那里原来的代码总是假设 accumulate_append_subpath() 会将每个子 Append 和子 MergeAppend 路径提取到顶层路径。虽然似乎没有实际的错误是由额外的分区表 RT 索引记录引起的,但它意味着后来在规划时,当我们构建运行时修剪信息时,我们浪费了精力并为 executor 没有运行时修剪子路径的分区表构建了 PartitionedRelPruneInfos。这里我们将其收紧,以便 partitioned_rels 只包含实际在该 Append/MergeAppend 中有子路径的分区表的 RT 索引。现在我们可以断言每个 PartitionedRelPruneInfo 都有一个非空的 present_parts。这应该可以让我们捕获任何被遗漏的奇怪的角落情况。顺便说一句,AppendPath 和 MergeAppendPath 的 partitioned_rel 字段不再是一个 IntList 的 List,这似乎没有一个好理由了。我们可以简单地拥有一个 Relids 的 List。这在内存中更紧凑,并且添加新成员也更快。我们仍然知道根分区是什么,因为它们的 relid 总是比它们的子节点低。以前这个字段用于更多目的,但运行时分区修剪现在仍然是其唯一用户,并且不需要 IntList 的 List。这里我们还去掉了 RelOptInfo 的 partitioned_child_rels 字段。这以前是(有时不正确地)设置 Append/MergeAppend 路径的 partitioned_rels 字段。那是该字段唯一的用途,所以我们可以放心地删除它。我也忍不住改变了一些附近的代码,利用新添加的 for_each_from 宏,这样我们就可以在不检查当前项是否是迭代中的第一项的情况下跳过列表的第一个元素。Andreas Kretschmer 的 bug 报告促成了这项工作,然而,经过一些考虑,我个人不认为这是一个 bug 修复。所以不回填。在 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 提交

Michaël Paquier 提交

Heikki Linnakangas 提交

Thomas Munro 推送

Magnus Hagander 已推送

Peter Eisentraut 提交

Tomáš Vondra 提交了

Fujii Masao 提交

Peter Geoghegan 提交

  • 修复 nbtree 清理专用 VACUUM 统计信息不准确。从 posting list 元组(由 commit 0d861bbb 添加)计算堆 TIDs 的逻辑是错误的。在没有设置回调函数的情况下,它不计算任何 TIDs/index tuples。这意味着我们错误地计算了清理专用 VACUUM 中没有 index tuples,这可能导致受影响索引的 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 位设置。这个机制可能比该部分侧重的 generic 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 发送了一个补丁,用于添加一个新的表 am 'tid_visible' 来测试 tid 的可见性。

Peter Geoghegan 发送了另一个补丁版本,用于为 nbtree 添加删除去重。

Stephen Frost 发送了两个补丁版本,用于为 ANALYZE 使用预取。

Tomáš Vondra 发送了一个补丁,用于在 sort 调试中使用 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 发送了另一个补丁版本,用于将 \dX(列出扩展统计信息)添加到 psql。

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 使用核心的 resowner 设施来处理 EVP。

Yuzuko Hosoya 发送了另一个补丁版本,用于修复 autovacuum 和分区表之间的一些不一致之处。

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 实现,使其只有一个,并切换到使用 EVP 进行 OpenSSL。

Justin Pryzby 发送了另一个补丁版本,用于澄清最小/最大 IO 的计算,特别是相关性的双重使用和效果,避免重用“pages_fetched”变量,并将相关性统计信息用于位图扫描的成本计算,就像索引扫描一样。

Sergei Kornilov 发送了另一个补丁版本,允许使用 reload 更改一些恢复参数。

Marina Polyakova 发送了两个补丁版本,用于修复一个 bug,该 bug 表现为 pgbench 在 Windows 上不再支持大量客户端连接。

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

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

Dilip Kumar 发送了另一个补丁版本,用于实现自定义表压缩方法。

Tomáš Vondra 发送了一个补丁,用于从 brin_memtuple_initialize 中移除一些重复的代码。