恭喜 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 字节解压缩数据所需的压缩数据量;这是提交 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 提交
使用 Enum 为顶层逻辑复制消息类型。逻辑复制协议使用一个单字节字符来标识逻辑复制协议中的消息类型。代码对此使用字符串字面量。使用 Enum,这样 1. 所有使用的字符串字面量都可以在一个地方找到。这使得添加更多类型而不会有冲突的风险变得容易。2. 很容易定位处理给定消息类型的代码。3. 与 switch 语句一起使用时,使用 -Wswitch 可以轻松识别缺失的 case。作者: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
修复拼写错误。作者:Hou Zhijie 讨论:https://postgr.es/m/855a9421839d402b8b351d273c89a8f8@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/8c2d8f6cc4848cf9276dff445bb0f2f664083eca
在 pgstat.c 中使用 strlcpy 而不是 memcpy 来复制 slot 名称。这里没有明显的错误,但与同一文件中的其他地方保持一致会更好。顺便,修复 pgstat_recv_replslot 中的错误断言。作者:Kyotaro Horiguchi 审阅者:Sawada Masahiko 和 Amit Kapila 讨论:https://postgr.es/m/20201104.175523.1704166915688949637.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/4f841ce3f7f4d429a3a275f82745d63c78cde4b2
Michaël Paquier 提交
修复注释和文档中的一些语法和拼写错误。文档修复已回填到适用位置。作者: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}composition 代码中的小问题。表生成脚本在重组排序时匹配代码点时会错误地抱怨。这不会导致生成错误的表。请注意,这种情况尚未到达,但可能在将来的更新中到达。frontend.x 不需要包含 pg_bswap.h。作者: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。这应该在最初提交中完成,该提交从 c9b0cbe 开始将 unix_socket_directories 设为列表。此更改允许正确支持 ALTER SYSTEM 的情况,在其中可以指定多个路径作为列表,如下面的模式,其中展平被应用于每个项目:ALTER SYSTEM SET unix_socket_directories = '/path1', '/path2'; 在 postgresql.conf 中指定的任何参数都以相同的方式解析,因此没有兼容性更改。pg_dump 有一个硬编码的参数列表,标记为 GUC_LIST_QUOTE,它会定期更新。为了清晰起见,这些参数按字母顺序重新排序。作者:Ian Lawrence Barwick 审阅者:Peter Eisentraut、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 等关键字。查询(Queries)章节中的大多数章节和子章节标题都包含关键字,但“Sorting Rows”和“Combining Rows”都没有。没有规定必须包含,但这似乎是个好习惯。对于稍微接触过 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。为引用的数据库对象的版本提供记录的地方。后续提交将使用它来记录对索引的排序规则(collation)版本的依赖关系,但其他类型的对象也提出了类似的建议。作者: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 个失败的 build farm 动物的问题。审阅者: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 请求,但错过了一个代码路径。通过将 forget-and-unlink 代码集中到一个函数来修复。报告者: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_NAME。提交 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 更为合适。(当然,它们在内部是相同的,所以没有外部可见的影响。)为此,将 PG_GETARG_TRANSACTIONID 导出到 xid.c 之外。我们还导出 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 这样的与排序规则相关的(collation-aware)数据类型的哈希函数将出错,因为非确定性排序规则的引入也使得哈希函数需要排序规则。其后果是,在此更改之前,使用 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
移动 catalog 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 索引声明。将系统目录索引声明从 catalog/indexing.h 移动到各自父表的 catalog/pg_*.h 文件中。最初将其拆分的原因是旧的 genbki 系统按其读取的目录文件顺序生成输出,因此所有 indexing 内容都需要单独处理。但这已不再是这种情况,将它们放在一起更有意义。审阅者: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 提交了
当使用 volatile 表达式时,get_useful_pathkeys_for_relation 的改进。在 Gather Merge 下方考虑 Incremental Sort 时,我们需要在匹配 pathkeys 到 EC 成员时更加小心。仅仅找到一个 Vars 都属于当前关系目标的成员是不够的;特别是 volatile 表达式需要包含在目标中,否则使用 pathkey 就太早了。报告者: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
在 sort 调试中使用 INT64_FORMAT 打印 int64 变量。提交 6ee3b5fb99 清理了大部分与增量排序相关的 long/int64 混淆,但排序调试消息仍然使用 %ld 来表示 int64 变量。所以进行修复。作者:Haiying Tang 回填至:13,其中引入了增量排序代码。讨论:https://postgr.es/m/4250be9d350c4992abb722a76e288aef%40G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/90851d1d26f54ccb4d7b1bc49449138113d6ec83
正确解压缩 brin_form_tuple 中的数据。brin_form_tuple 未能考虑值可能已被压缩,而是将压缩指针插入到索引中。这很容易导致索引损坏,因为 toast 数据可能会被 vacuum 清理掉。然而,清理不会关心索引,留下无效的 toast 指针,这会触发类似以下的错误:ERROR:pg_toast_16426 的 toast 值 16433 缺少块号 0。不太严重的后果是由于索引行过大而导致的不一致失败,这取决于 brin_form_tuple 操作的是行的普通版本还是压缩版本。例如,CREATE TABLE t (val TEXT); INSERT INTO t VALUES ('... long value ...') CREATE INDEX idx ON t USING brin (val); 可能会成功,因为行很可能包含 toast 指针。交换 INSERT 和 CREATE INDEX 的顺序可能会失败:ERROR:索引行大小 8712 超出索引“idx”的最大值 8152,因为这发生在行值被压缩之前。该错误自 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
Fujii Masao 提交
在 syslogger 中使用标准的 SIGHUP 处理程序。提交 1e53fe0e70 更改了后台进程,使其使用标准的 SIGHUP 处理程序。同样,此提交使 syslogger 使用标准的 SIGHUP 处理程序来简化代码。作者:Bharath Rupireddy 审阅者:Fujii Masao 讨论:https://postgr.es/m/CALj2ACXPorUqePswDtOeM_s82v9RW32E1fYmOPZ5NuE+TWKj_A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/02d332297f9bfe63476d53a439cc8f3b05bb5e67
移除用于向 startup 进程发送信号的专用 latch。此提交移除用于向 startup 进程发送信号的专用 latch,转而使用其 procLatch,因为它与可能的通用信号处理程序使用该 latch 更加兼容。提交 1e53fe0e70 更改了后台进程,使其使用标准的 SIGHUP 处理程序。同样,此提交还使 startup 进程使用标准的 SIGHUP 处理程序来简化代码。作者:Fujii Masao 审阅者: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' 发生段错误。以前,latch 在调用 ShutdownWalRcv() 后被重置为 NULL。但在 ShutdownWalRcv() 和 walreceiver 实际退出之间可能有一个窗口。如果在该窗口期间 walreceiver 设置了 latch,则可能发生段错误。为了修复这个问题,此提交更改了 walreceiver,使其仅在 latch 尚未重置为 NULL 时才设置 latch。作者:Fujii Masao 讨论:https://postgr.es/m/5c1f8a85-747c-7bf9-241e-dd467d8a3586@iki.fi https://git.postgresql.org/pg/commitdiff/113d3591b859fb8dc191bc0599d1ad62d91f1aa4
pg_prewarm:使 autoprewarm leader 使用标准的 SIGHUP 和 SIGTERM 处理程序。提交 1e53fe0e70 更改了后台进程,使其使用标准的 SIGHUP 处理程序。同样,此提交还使 autoprewarm leader 进程也使用标准的 SIGHUP 和 SIGTERM 处理程序,以简化代码。作者:Bharath Rupireddy 审阅者:Kyotaro Horiguchi、Fujii Masao 讨论:https://postgr.es/m/CALj2ACXPorUqePswDtOeM_s82v9RW32E1fYmOPZ5NuE+TWKj_A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/53f614f1302d56e5fbb98826c7eee3c715411184
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 提交
修复 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 发送了一个补丁,用于添加一个新的表 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 中移除一些重复的代码。