祝贺新核心团队成员 Andres Freund 和 Jonathan Katz!https://postgresql.ac.cn/developer/core/
本周人物:https://postgresql.life/post/elein_mustain/
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/
http://archives.postgresql.org/pgsql-jobs/2020-11/
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 推送了
对顶层逻辑复制消息类型使用枚举。逻辑复制协议使用单字节字符来标识逻辑复制协议中的消息类型。代码对同一类型使用字符串字面量。使用枚举可以:1. 所有使用的字符串字面量都可以在一个地方找到。这使得添加更多类型变得容易,而没有冲突的风险。2. 很容易找到处理给定消息类型的代码。3. 当与 switch 语句一起使用时,很容易使用 -Wswitch 识别缺失的情况。作者:Ashutosh Bapat 审核人:Kyotaro Horiguchi、Andres Freund、Peter Smith 和 Amit Kapila 讨论:https://postgr.es/m/CAExHW5uPzQ7L0oAd_ENyvaiYMOPgkrAoJpE+ZY5-obdcVT6NPg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/644f0d7cc9c2cb270746f2024c706554e0fbec82
修复拼写错误。作者:侯志杰 讨论:https://postgr.es/m/855a9421839d402b8b351d273c89a8f8@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/8c2d8f6cc4848cf9276dff445bb0f2f664083eca
在 pgstat.c 中使用 strlcpy 而不是 memcpy 来复制槽名称。这里没有明显的错误,但最好与同一文件中其他地方的使用保持一致。顺便说一句,修复 pgstat_recv_replslot 中一个错误的断言。作者:京太郎堀口 审核人:泽田正彦和 Amit Kapila 讨论:https://postgr.es/m/20201104.175523.1704166915688949637.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/4f841ce3f7f4d429a3a275f82745d63c78cde4b2
米迦勒·帕基耶推送了
修复注释和文档中的一些语法和拼写错误。文档修复已向后移植到它们适用的版本。作者:Justin Pryzby 讨论:https://postgr.es/m/20201031020801.GD3080@telsasoft.com 向后移植:9.6 https://git.postgresql.org/pg/commitdiff/8a15e735be00f156a7227741c0ce88702e6de099
还原 pg_relation_check_pages()。由于对 bufmgr.c 中代码核心部分的可移植性以及在页面读取期间使用分区映射锁的投诉,这将还原以下提交集:c780a7a9 f2b88396 b787d4ce ce7f772c 60a51c6b。根据与 Andres Freund、Robert Haas 和我自己的讨论。增加目录版本。讨论:https://postgr.es/m/20201029181729.2nrub47u7yqncsv7@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/e152506adef4bc503ea7b8ebb4fedc0b8eebda81
修复新的 Unicode {de,re}分解代码的一些小问题。当匹配代码点时,表生成脚本会在重新组合排序中错误地发出投诉。这不会导致生成错误的表。请注意,此条件尚未达到,但可能会在未来的更新中达到。pg_bswap.h 不需要包含在 frontend.x 中。作者:John Naylor 讨论:https://postgr.es/m/CAFBsxsGWmExpvv=61vtDKCs7+kBbhkwBDL2Ph9CacziFKnV_yw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ceaeac54f75f0117a7b3caa2f8ecba5cfac18ee5
向 unix_socket_directories 添加 GUC_LIST_INPUT 和 GUC_LIST_QUOTE。这应该在将 unix_socket_directories 作为列表的初始提交 c9b0cbe 中完成。此更改允许正确支持 ALTER SYSTEM 的情况,在 ALTER SYSTEM 中,可以像以下模式一样将多个路径指定为一个列表,其中对每个项目应用扁平化:ALTER SYSTEM SET unix_socket_directories = '/path1', '/path2'; postgresql.conf 中指定的任何参数都以相同的方式解析,因此没有兼容性更改。pg_dump 有一个用 GUC_LIST_QUOTE 标记的参数的硬编码列表,它会定期更新。为了清楚起见,这些参数按字母顺序重新排序。作者:Ian Lawrence Barwick 审核人:Peter Eisentraunt、Tom Lane、Michael Paquier 讨论:https://postgr.es/m/CAB8KJ=iMOtNY6_sUwV=LQVCJ2zgYHBDyNzVfvE5GN3WQ3v9kQg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a05dbf477b0ef173adb1ae5d004cbeb0cf400b66
Heikki Linnakangas 推送了
doc:在节标题中提及 UNION/ORDER BY 等关键字。查询章节中的大多数节和小节标题都明确地使用了关键字,但“排序行”和“组合行”都没有。没有规定它们必须是这样,但这似乎是一个好习惯。这些关键字将引起任何具有一点 SQL 经验的人的注意。David G. Johnston,根据 bilge@scriptfusion.com 的建议 讨论:https://postgresql.ac.cn/message-id/159981394174.31338.7014519396749859167%40wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/8ef2a5afdf8ec9e4c8b28a7042c9508eb6161671
pg_rewind:将 syncTargetDirectory() 移动到 file_ops.c。为了保持一致性。所有其他在目标目录上运行的低级函数都在 file_ops.c 中。审核人:Michael Paquier 讨论:https://postgresql.ac.cn/message-id/0c5b3783-af52-3ee5-f8fa-6e794061f70d%40iki.fi https://git.postgresql.org/pg/commitdiff/ffb4e27e9c5ea87f9fecb7036dfc7cc1f38169b6
重构 pg_rewind 以更清晰地做出决策。在收集完所有必要信息之后,决定如何处理每个文件现在是一个单独的步骤。这样更清楚。以前,决策是在 process_source_file() 和 process_target_file() 之间划分的,并且很难拼凑出整体规则是什么。审核人:Kyotaro Horiguchi、Soumyadeep Chakraborty 讨论:https://postgresql.ac.cn/message-id/0c5b3783-af52-3ee5-f8fa-6e794061f70d%40iki.fi https://git.postgresql.org/pg/commitdiff/eb00f1d4bf96bdba236bcc089f3ae94db9b7c603
pg_rewind:用 simplehash 替换混合列表 + 数组数据结构。既然 simplehash 可以在前端代码中使用,让我们利用它。审核人:Kyotaro Horiguchi、Soumyadeep Chakraborty 讨论:https://postgresql.ac.cn/message-id/0c5b3783-af52-3ee5-f8fa-6e794061f70d%40iki.fi https://git.postgresql.org/pg/commitdiff/f81e97d0475cd4bc597adc23b665bd84fbf79a0d
pg_rewind: 重构从本地/libpq 源获取数据的抽象层。通过引入一个通用的抽象类(借用面向对象编程的术语),使“源”服务器的抽象更加清晰,该类表示可以对源服务器执行的所有操作。它有两个实现,一个是通过 libpq 获取,另一个是从本地目录获取。这增加了一些代码,但更容易理解发生了什么。copy_executeFileMap() 和 libpq_executeFileMap() 函数基本上包含相同的逻辑,只是调用不同的函数来获取源文件。重构,使公共逻辑位于一个名为 perform_rewind() 的新函数中。审阅人:Kyotaro Horiguchi,Soumyadeep Chakraborty 讨论:https://postgresql.ac.cn/message-id/0c5b3783-af52-3ee5-f8fa-6e794061f70d%40iki.fi https://git.postgresql.org/pg/commitdiff/37d2ff38031262a1778bc76a9c55fff7afbcf275
Thomas Munro 推送
添加 pg_depend.refobjversion。提供一个地方来记录引用的数据库对象的版本。后续提交将使用此功能来记录索引的排序规则版本的依赖关系,但对于其他类型的对象也提出了类似的想法。作者:Thomas Munro thomas.munro [AT] gmail.com 审阅人:Julien Rouhaud rjuju123 [AT] gmail.com 审阅人:Peter Eisentraut peter.eisentraut [AT] 2ndquadrant.com 讨论:https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/cd6f479e79f3a33ef7a919c6b6c0c498c790f154
删除 pg_collation.collversion。此模型无法扩展到覆盖默认排序规则,并且在版本更改时没有关于受影响数据库对象的任何信息。删除,为后续添加新机制的提交做准备。作者:Thomas Munro thomas.munro [AT] gmail.com 审阅人:Julien Rouhaud rjuju123 [AT] gmail.com 审阅人:Peter Eisentraut peter.eisentraut [AT] 2ndquadrant.com 讨论:https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/7d1297df0830725d4434ba7dbf71a9e8221ad49e
跟踪索引的排序规则版本。在创建或重建索引时,在 pg_depend 中记录依赖排序规则的当前版本。稍后访问索引时,如果当前版本不匹配,则警告索引可能已损坏。感谢 Douglas Doole、Peter Eisentraut、Christoph Berg、Laurenz Albe、Michael Paquier、Robert Haas、Tom Lane 和其他人的非常有益的讨论。作者:Thomas Munro thomas.munro [AT] gmail.com 作者:Julien Rouhaud rjuju123 [AT] gmail.com 审阅人:Peter Eisentraut peter.eisentraut [AT] 2ndquadrant.com (早期版本) 讨论:https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/257836a75585934cc05ed7a80bccf8190d41e056
容忍旧式 Windows 区域设置名称的版本查找失败。接受我们暂时无法获取此类区域设置名称的版本。用户将需要指定较新的语言标记格式才能启用排序规则版本控制功能。目前尚不清楚我们是否可以为此目的可靠地从旧样式自动转换为新样式。不幸的是,这意味着除非您在 initdb 或 CREATE DATABASE 时提供类似 en-US 的内容,否则排序规则版本控制可能不适用于默认排序规则(尽管由于尚未理解的原因,它似乎在某些系统上可以正常工作)。找到更好的解决方案或记录此怪癖会很好,如果我们确定了这一点,但这应该在此期间解决 3 个失败的构建场问题。审阅人:David Rowley dgrowleyml [AT] gmail.com 审阅人:Tom Lane tgl [AT] sss.pgh.pa.us 讨论:https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/9f12a3b95dd56c897f1aa3d756d8fb419e84a187
修复 SLRU 段的取消链接。提交 dee663f7 旨在在取消链接段文件之前删除任何排队的 fsync 请求,但错过了一个代码路径。通过将忘记和取消链接代码集中到一个函数中来修复。报告人:Tomas Vondra tomas.vondra [AT] 2ndquadrant.com 讨论:https://postgr.es/m/20201104013205.icogbi773przyny5%40development https://git.postgresql.org/pg/commitdiff/c732c3f8c122009de373cff9b44b5cf0992ba1bf
修复排序规则版本查找中的断言。提交 257836a7 包含一个断言,即版本查找例程没有尝试查找“C”或“POSIX”,但这种情况可以使用面向用户的 SQL 函数 pg_collation_actual_version() 来访问。删除断言。 https://git.postgresql.org/pg/commitdiff/d50e3b1f8d763d51080ca4f6cbaa6818a6472292
Magnus Hagander 推送
在 CREATE TABLE 文档中阐明临时表名称的阴影。作者:David Johnston https://git.postgresql.org/pg/commitdiff/5b3dca096f8e504b73812f68716fb68dd1176d6d
在 sslinfo 中使用 be_tls_* API 获取 SSL 信息。sslinfo 直接将 Port->ssl 成员传递给 OpenSSL,以便提取有关连接的信息。这打破了后端 TLS 实现提供的 API,并重复了代码而没有任何好处。重写为尽可能多地使用后端 API。作者:Daniel Gustafsson daniel [AT] yesql.se https://git.postgresql.org/pg/commitdiff/5d1833f414973595411779b86e085fb05907a805
改进后端 OpenSSL 实现中的错误处理。提交 d94c36a45ab 为 sslinfo 引入了错误处理,以优雅地处理 OpenSSL 错误。这会将此错误处理移植到后端 TLS 实现。作者:Daniel Gustafsson daniel [AT] yesql.se https://git.postgresql.org/pg/commitdiff/13cfa02f77936895bff6ffabf1fde5d47fd1df07
在测试触发器中使用非已弃用的 TG_TABLE_MAME。提交 3a9ae3d2068(早在 2006 年)弃用了 TG_RELNAME,转而使用 TG_TABLE_NAME,但测试用例中的现有用法一直保留至今。更改为使用 TG_TABLE_NAME 代替(测试用例仍然涵盖 TG_RELNAME)。 https://git.postgresql.org/pg/commitdiff/44a184cb686866b10d63695db344195c239f9374
添加 pg_strong_random_init 函数以初始化随机数生成器。当前只有 OpenSSL 需要此初始化,但将来其他 SSL 实现也可能需要它。将此功能抽象到一个单独的函数中,使其更清晰明了,并消除了 fork_process.c 对 OpenSSL 标头的依赖。OpenSSL 的特殊之处在于,即使我们不打算直接使用它,我们也需要初始化此随机数生成器,直到我们放弃对 OpenSSL 1.1.1 之前的所有内容的支持。(当然,如果实际上使用了它)。此时所有其他实现都为空,但预计将来会添加更多。作者:Daniel Gustafsson daniel [AT] yesql.se,Michael Paquier michael [AT] paquier.xyz 审阅人:Magnus Hagander magnus [AT] hagander.net 讨论:https://postgr.es/m/F6291C3C-747C-4C93-BCE0-28BB420B1FF5@yesql.se https://git.postgresql.org/pg/commitdiff/5ee180a3947060b98284a935f26f92c71d698f7c
Peter Eisentraut 推送
在适当的地方使用 PG_GETARG_TRANSACTIONID。某些地方使用 PG_GETARG_UINT32,而使用 PG_GETARG_TRANSACTIONID 会更合适。(当然,它们在内部是相同的,因此没有外部可见的效果。)为此,请在 xid.c 之外导出 PG_GETARG_TRANSACTIONID。我们还导出 PG_RETURN_TRANSACTIONID 以实现对称性,即使目前没有外部用户。作者:Ashutosh Bapat ashutosh.bapat [AT] 2ndquadrant.com 讨论:https://postgresql.ac.cn/message-id/flat/d8f6bdd536df403b9b33816e9f7e0b9d@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/dd26a0ad760b11237d7ea9cda8ccccc1826c2c64
删除测试中已弃用的包含运算符的使用。在 gist 相关测试中,将 @ 切换为 <@
,将 ~ 切换为 @>
。旧的运算符名称已被弃用,最终(可能很快)将被删除。作者:Justin Pryzby pryzby [AT] telsasoft.com 讨论:https://postgresql.ac.cn/message-id/flat/20201027032511.GF9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/3165426e54df02a6199c0a216546e5095e875a0a
删除内置类型的已弃用包含运算符。删除内置几何数据类型的旧包含运算符 @ 和 ~。这些已被弃用;请改用 <@
和 @>
。(某些 contrib 模块仍然包含相同的已弃用运算符。这将单独处理。)作者:Justin Pryzby pryzby [AT] telsasoft.com 讨论:https://postgresql.ac.cn/message-id/flat/20201027032511.GF9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/2f70fdb0644c32c4154236c2b5c241bec92eac5e
禁止 ALTER TABLE ONLY / DROP EXPRESSION。当前实现无法正确处理此问题,因此暂时禁止它。GENERATED 子句必须附加到列定义,并且不能像 DEFAULT 那样稍后添加,因此如果子表具有父表没有的生成表达式,则子列必然是 attlocal 列。因此,要实现 ALTER TABLE ONLY / DROP EXPRESSION,我们需要额外的代码来更新直接子表的 attislocal,有点类似于 DROP COLUMN 的方式,以便可以正确地转储和恢复结果状态。讨论:https://postgresql.ac.cn/message-id/flat/15830.1575468847%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/bf797a8d9768239f5e3204b013044274b2c7c24a
启用文本数组的哈希分区。hash_array_extended() 需要将 PG_GET_COLLATION() 传递给元素类型的哈希函数。否则,诸如 text 之类的排序规则感知数据类型的哈希函数将出错,因为引入不确定性排序规则后,哈希函数也需要排序规则。这样做的结果是,在此更改之前,使用分区键中 text 的数组进行哈希分区将不起作用。审阅人:Heikki Linnakangas hlinnaka [AT] iki.fi 审阅人:Tom Lane tgl [AT] sss.pgh.pa.us 审阅人:Michael Paquier michael [AT] paquier.xyz 讨论:https://postgresql.ac.cn/message-id/flat/32c1fdae-95c6-5dc6-058a-a90330a3b621%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/560564d3addcb6c54e13c1ca8bd11afafbb7ba11
移动目录 Toast 表声明。将系统目录 Toast 表声明从 catalog/toasting.h 移动到各自父表的 catalog/pg_*.h 文件中。最初将其分开的原因是旧的 genbki 系统按照它读取的目录文件的顺序生成输出,因此所有 toasting 相关的东西都需要单独处理。但现在情况不再如此,将其放在一起更有意义。审核人:John Naylor john.naylor [AT] enterprisedb.com 讨论:https://postgresql.ac.cn/message-id/flat/c7cc82d6-f976-75d6-2e3e-b03d2cab26bb@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/b4c9695e79f79d39d55853acac4c1493ac70a529
移动目录索引声明。将系统目录索引声明从 catalog/indexing.h 移动到各自父表的 catalog/pg_*.h 文件中。最初将其分开的原因是旧的 genbki 系统按照它读取的目录文件的顺序生成输出,因此所有索引相关的东西都需要单独处理。但现在情况不再如此,将其放在一起更有意义。审核人:John Naylor john.naylor [AT] enterprisedb.com 讨论:https://postgresql.ac.cn/message-id/flat/c7cc82d6-f976-75d6-2e3e-b03d2cab26bb@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/bdc4edbea6fc847f806e1e7118d730e159512bfc
修复客户端工具中冗余的错误消息。一些客户端工具重复了 libpq 已经提供的错误消息。讨论:https://postgresql.ac.cn/message-id/flat/3e937641-88a1-e697-612e-99bba4b8e5e4%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/6be725e701611660b36642de9ff1d665a1eb24f5
修复错误消息更改的测试。修复 6be725e701611660b36642de9ff1d665a1eb24f5 https://git.postgresql.org/pg/commitdiff/8cff66d309b90e03f1e76494375960f35eff6424
Tomáš Vondra 推送
修复 get_useful_pathkeys_for_relation 对易变表达式的处理。当考虑 Gather Merge 下的增量排序时,在将路径键与 EC 成员匹配时,我们需要更加小心。仅仅找到一个其 Vars 全部位于当前关系目标中的成员是不够的;特别是易变表达式需要包含在目标中,否则使用路径键就太早了。报告人:Jaime Casanova 作者:James Coleman 审核人:Tomas Vondra 回溯到:13,增量排序代码是在此处添加的。讨论:https://postgr.es/m/CAJGNTeNaxpXgBVcRhJX%2B2vSbq%2BF2kJqGBcvompmpvXb7pq%2BoFA%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/ebb7ae839d033d0f279670e249f54646a08b8c48
使用 INT64_FORMAT 在排序调试中打印 int64 变量。提交 6ee3b5fb99 清理了大多数与增量排序相关的 long/int64 混淆,但排序调试消息仍然对 int64 变量使用 %ld。因此修复了这个问题。作者:Haiying Tang 回溯到:13,增量排序代码是在此处添加的。讨论:https://postgr.es/m/4250be9d350c4992abb722a76e288aef%40G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/90851d1d26f54ccb4d7b1bc49449138113d6ec83
在 brin_form_tuple 中正确 detoast 数据。brin_form_tuple 没有考虑到值可能被 toasted,将 toast 指针插入到索引中。这很容易导致索引损坏,因为 toast 数据可能被 vacuum 删除和清理。但是清理不会关心索引,留下无效的 toast 指针,这会触发如下错误:ERROR: missing chunk number 0 for toast value 16433 in pg_toast_16426。一个不太严重的后果是,由于索引行太大而导致不一致的失败,这取决于 brin_form_tuple 是否对行的普通版本或 toasted 版本进行操作。例如,CREATE TABLE t (val TEXT); INSERT INTO t VALUES ('... long value ...') CREATE INDEX idx ON t USING brin (val); 可能会成功,因为该行很可能包含 toast 指针。交换 INSERT 和 CREATE INDEX 的顺序可能会失败:ERROR: index row size 8712 exceeds maximum 8152 for index "idx",因为这发生在行值被 toasted 之前。该错误自 PostgreSQL 9.5 引入 BRIN 索引以来就存在。因此回溯到最早版本。作者:Tomas Vondra 审核人:Alvaro Herrera 回溯到:9.5 讨论:https://postgr.es/m/20201001184133.oq5uq75sb45pu3aw@development 讨论:https://postgr.es/m/20201104010544.zexj52mlldagzowv%40development https://git.postgresql.org/pg/commitdiff/7577dd84807a808f295dbfb0191540750ff98002
藤井 正雄 推送
在 syslogger 中使用标准 SIGHUP 处理程序。提交 1e53fe0e70 更改了后台进程,使其使用标准 SIGHUP 处理程序。与此类似,此提交使 syslogger 使用标准 SIGHUP 处理程序以简化代码。作者:Bharath Rupireddy 审核人:藤井 正雄 讨论:https://postgr.es/m/CALj2ACXPorUqePswDtOeM_s82v9RW32E1fYmOPZ5NuE+TWKj_A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/02d332297f9bfe63476d53a439cc8f3b05bb5e67
消除用于向启动进程发送信号的专用闩锁。此提交消除了用于向启动进程发送信号的专用闩锁,转而使用其 procLatch,因为这与可能使用该闩锁的通用信号处理程序更兼容。提交 1e53fe0e70 更改了后台进程,使其使用标准 SIGHUP 处理程序。与此类似,此提交还使启动进程使用标准 SIGHUP 处理程序以简化代码。作者:藤井 正雄 审核人:Bharath Rupireddy, Michael Paquier 讨论:https://postgr.es/m/CALj2ACXPorUqePswDtOeM_s82v9RW32E1fYmOPZ5NuE+TWKj_A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ac22929a2613e122708bd0172508ac863c51c1cc
修复提交 ac22929a26 导致的段错误。提交 ac22929a26 更改了 recoveryWakeupLatch,使其在恢复结束时重置为 NULL。此更改可能会导致 buildfarm 成员 'elver' 中出现段错误。以前,在调用 ShutdownWalRcv() 后,闩锁会重置为 NULL。但是,在 ShutdownWalRcv() 和 walreceiver 的实际退出之间可能存在一个窗口。如果 walreceiver 在该窗口期间设置了闩锁,则可能会发生段错误。为了解决此问题,此提交更改了 walreceiver,使其仅在闩锁尚未重置为 NULL 时才设置闩锁。作者:藤井 正雄 讨论:https://postgr.es/m/5c1f8a85-747c-7bf9-241e-dd467d8a3586@iki.fi https://git.postgresql.org/pg/commitdiff/113d3591b859fb8dc191bc0599d1ad62d91f1aa4
pg_prewarm:使 autoprewarm 领导者使用标准 SIGHUP 和 SIGTERM 处理程序。提交 1e53fe0e70 更改了后台进程,使其使用标准 SIGHUP 处理程序。与此类似,此提交还使 autoprewarm 领导者进程使用标准 SIGHUP 和 SIGTERM 处理程序,以简化代码。作者:Bharath Rupireddy 审核人:Kyotaro Horiguchi, 藤井 正雄 讨论:https://postgr.es/m/CALj2ACXPorUqePswDtOeM_s82v9RW32E1fYmOPZ5NuE+TWKj_A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/53f614f1302d56e5fbb98826c7eee3c715411184
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 推送
修复 index_get_partition 中的内存泄漏。当要求一个在表分区中没有索引分区的索引时,索引列表会被泄漏。诚然,这不是一个常见的情况——而且在大多数发生这种情况时,调用者无论如何都会抛出一个错误——但为了简洁起见,并且为了防止任何第三方代码调用此函数,值得修复。与此同时,删除使用 lfirst_oid() 来获取我们已经拥有的值的做法。作者:Justin Pryzby pryzby [AT] telsasoft.com 审核人:Michael Paquier michael [AT] paquier.xyz 讨论:https://postgr.es/m/20201105203606.GF22691@telsasoft.com https://git.postgresql.org/pg/commitdiff/623644f02cbde7ad3812b201bd36213a206c3341
消息样式改进。 * 避免无意义地突出显示并行工作进程执行了索引 vacuum;用户不关心。 * 不要给人一种印象,即对 TOAST 表上的无效索引进行非并发 reindex 会起作用,因为它不会。 * 为一条神秘的消息添加“translator:”注释。讨论:https://postgr.es/m/20201107034943.GA16596@alvherre.pgsql 审核人:Michael Paquier michael [AT] paquier.xyz https://git.postgresql.org/pg/commitdiff/52eec1c53aa6a7df1683fba79078793f1d0eba42
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 中删除了一些重复的代码。