Planet PostgreSQL: https://planet.postgresql.org/
本周 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间/太平洋夏令时间周日下午 3:00 前将新闻和公告提交至 david@fetter.org。
Michaël Paquier 推送了
修复 src/bin/pg_basebackup/ 中的几个内存泄漏。这些是由 7fbe0c8 引入的,可能发生在 pg_basebackup 和 pg_receivewal 中。根据 Coverity 报告的 walmethods.c 中的问题,经过更多审查后,我发现了 receivelog.c 中的问题。向后移植:10 https://git.postgresql.org/pg/commitdiff/4ef64c425dbcda151c9f163aadff982343808e09
doc:修复使用 PGOPTIONS 运行回归测试的命令示例。文档中提到使用 log_checkpoints,这在此上下文中无法使用。此提交将 log_checkpoints 替换为 force_parallel_mode,这是一个对执行与并行性相关的检查有用的开发人员选项。854434c 中的疏忽。作者:Haiying Tang 讨论:https://postgr.es/m/OS0PR01MB6113954B883ACEB2DDC973F2FBE59@OS0PR01MB6113.jpnprd01.prod.outlook.com 向后移植:14 https://git.postgresql.org/pg/commitdiff/efe080220942fb8c2fdca66a3ab436159f7db86b
在解析整数选项时跳过尾随空格。strtoint() 通过 strtol() 会跳过前导空格,但对于尾随空格,没有应用相同的规则,导致行为不一致。更改了一些测试以涵盖此区域。作者:Michael Paquier 复核人:Kyotaro Horiguchi 讨论:https://postgr.es/m/YP5Pv0d13Ct+03ve@paquier.xyz https://git.postgresql.org/pg/commitdiff/f7a9a3d4b24a4ad0de7992f01a0dd2a02ccd30a4
简化 pg_receivewal TAP 测试中的匹配模式检查。测试的 ZLIB 部分中的检查,将未压缩的部分段的名称与完成的压缩段匹配时,使用了 m//,而简单的相等性检查就足够了。这使得测试更加严格,而不会影响其覆盖范围。作者:Kyotaro Horiguchi 讨论:https://postgr.es/m/20210726.174622.826565852378770261.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/24ba1a87e4056ec34c8a685633a1a14fb89e5700
在 ALTER TABLE 中添加对 SET ACCESS METHOD 的支持。用于支持更改表的访问方法,类似于表空间或关系持久性的更改,需要对更改的关系进行独占锁的表重写。当从旧关系扫描元组并将其插入到新关系中时,ALTER TABLE 中完成的表重写已经通过表 AM 层,这使得此实现非常简单。请注意,分区表不受支持,因为它们没有定义的访问方法。作者:Justin Pryzby,Jeff Davis 复核人:Michael Paquier,Vignesh C 讨论:https://postgr.es/m/20210228222530.GD20769@telsasoft.com https://git.postgresql.org/pg/commitdiff/b0483263dda0824cc49e3f8a022dab07e1cdf9a7
澄清一些使用俚语“up2date”的注释。其中大部分是新的,来自 a8fd13c,“up-to-date”对于普通读者来说更容易解析。作者:Peter Smith 讨论:https://postgr.es/m/CAHut+PtHbHvgOjs_R9LyDF21j-Wn8SxoTtWMQNP2ifXN6t2cSg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/7b7fbe1e8bb4b2a244d1faa618789db411316e55
在 pg_verifybackup 无法找到 pg_waldump 时添加缺少的 exit()。pg_verifybackup 默认需要 pg_waldump 来检查备份所需的 WAL 段范围之后,除非指定了 --no-parse-wal。代码检查了安装中二进制文件 pg_waldump 的存在并报告了错误,但它忘记了正确退出()。这可能会导致报告令人困惑的错误。复核人:Robert Haas,Fabien Coelho 讨论:https://postgr.es/m/YQDMdB+B68yePFeT@paquier.xyz 向后移植:13 https://git.postgresql.org/pg/commitdiff/2ad98fdf53edf1a90123e3b189cc6f0a31986891
在各种二进制文件的错误路径中添加一些缺少的 exit() 调用。进行了以下更改:- 在 pg_archivecleanup 中,较旧 WAL 段的清理永远不会立即失败。- 在 pgbench 中,线程屏障的初始化不会出现严重故障。- 在 pg_recvlogical 中,stat() 失败从未调用。- 在 pg_basebackup 中,两个 chmod() 报告了错误,但在解压缩一些新收到的 tar 数据时没有 exit()。即使发生此故障,也可能会继续写入一些数据,但这可能会在最后使用户感到困惑。这些可以说是错误,但它们会发生在不太可能发生故障的代码路径中,因此没有进行向后移植。复核人:Robert Haas,Fabien Coelho 讨论:https://postgr.es/m/YQDMdB+B68yePFeT@paquier.xyz https://git.postgresql.org/pg/commitdiff/856de3b39cf6041338b286a99257c324ce647f4e
修复 tab-complete.c 中的拼写错误。在 b048326 中引入。报告者:Jeff Davis 讨论:https://postgr.es/m/10785e3e9456a5d761164d3e60d9c4981b80e321.camel@j-davis.com https://git.postgresql.org/pg/commitdiff/15c6ede04577f856f702bf0a032297de667f382a
在 TAP 测试的 pg_receivewal --endpos 的新调用中使用 --no-loop。这些测试并非旨在失败,但如果它们失败,就像在某些情况下因为 ZLIB(?)在 Windows 上失败一样,它们可能会保持卡住。使用 --no-loop 会使测试立即失败。最早使用 --endpos 的测试已经这样做了。这些测试已在 ffc9dda 中添加。复核人:Andrew Dunstan 讨论:https://postgr.es/m/ec093ff1-a53c-0091-46a2-4537354b0dd4@dunslane.net https://git.postgresql.org/pg/commitdiff/3df93a66593c344e6298e618df3fa5090fca4309
在 Windows 上启用 ZLIB 的 pg_receivewal TAP 测试,第三次尝试。fairywren 和 bowerbird 因链接到错误的 ZLIB 版本而未能通过这些测试,从而导致 SIGBREAK 等错误,这些错误阻止了 buildfarm 运行或在写入压缩 WAL 段时出现 EACCES 失败。Andrew Dunstan 在这里完成了所有调查,因此他理应获得在 Windows 上启用这些测试的所有功劳。讨论:https://postgr.es/m/9040d5ed-6462-66a4-07ac-2923785ae563@dunslane.net https://git.postgresql.org/pg/commitdiff/0b8ea707580640f9d5562de77f4b563fa9131547
David Rowley 推送了
修复 get_agg_clause_costs 的不正确注释。调整 get_agg_clause_costs 中的标头注释,使其与该函数当前的功能相匹配。自 0a2bc5d61 以来,从未进行过递归搜索。它也不会像注释声称的那样确定 aggtranstype。这些都在 preprocess_aggref() 中完成。preprocess_aggref 现在也确定 numOrderedAggs,因此删除 get_agg_clause_costs 也计算“计数”的说法。通常,由于这只是对注释的调整,可能不值得向后移植,但由于此代码是 PG14 的新代码,并且该版本仍处于 beta 版中,因此似乎值得使注释匹配。讨论:https://postgr.es/m/CAApHDvrrGrTJFPELrjx0CnDtz9B7Jy2XYW3Z2BKifAWLSaJYwQ@mail.gmail.com 向后移植:14 https://git.postgresql.org/pg/commitdiff/2b58f894e56a1944e824e19c92337d6bf24d9c41
删除 MSVC 脚本中看似不需要的包含目录。这似乎是在 ee3b4188a 中添加的,但不太清楚为什么需要该提交中所做的更改,因为 18 个月前的 320c7eb8c 添加了代码以将 fmgroids.h 复制到 src/include/utils。amcheck 似乎可以在不添加其他包含目录的情况下完成,因此也许 dblink 也可以做到。这在我的 VS2017 环境中构建良好,但 buildfarm 可能会提醒我们为什么需要 ee3b4188a。只有一种方法可以确定。讨论:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4b763ff642e1a3608cbcaff062f6c2f465bfc6bd
文档:澄清在 ATTACH PARTITION 期间采取的锁定级别。并不清楚在 ATTACH PARTITION 操作期间是否会在 DEFAULT 分区上持有任何锁定级别。此外,请澄清如果 DEFAULT 分区或要附加的表本身是分区表,则将采取哪些锁。在这里,我只向后移植到 v12,因为在那之前,我们在分区表上获得了 ACCESS EXCLUSIVE 锁。当分区表本身被 ACCESS EXCLUSIVE 锁锁定时,提到在其他表上采取的锁似乎不那么相关。作者:Matthias van de Meent,David Rowley 讨论:https://postgr.es/m/CAEze2WiTB6iwrV8W_J=fnrnZ7fowW3qu-8iQ8zCHP3FiQ6+o-A@mail.gmail.com 向后移植:12 https://git.postgresql.org/pg/commitdiff/8709228775b549a2388e6568f463a4115e5a4c10
在 MSVC 构建脚本中一致地使用 AddFile 函数。我们似乎正在混合使用手动添加到 'files' 哈希和调用 Addfile() 方法。让我们始终如一地使用 AddFile()。复核人:Dagfinn Ilmari Mannsåker 讨论:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ed1884a2fedeffd2e6902451a9d41f4b3f6e859f
使 includes 字段在 MSVC 构建脚本中成为数组。以前,'includes' 字段是一个字符串。当它定义为数组时,管理起来稍微好一些。这使我们能够更轻松地检测和消除重复项。复核人:Álvaro Herrera、Andrew Dunstan、Dagfinn Ilmari Mannsåker 讨论:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/33d74c5d00e45248df66fa1bcd9222e0713ea5b1
不要在 MSVC 脚本中重复引用和库。为了不在 MSVC 构建脚本生成的 Visual Studio 项目文件中重复引用和库,请在再次添加特定引用或库之前,检查它是否已存在。复核人:Álvaro Herrera、Andrew Dunstan、Dagfinn Ilmari Mannsåker 讨论:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/15f16ec6511cf50374b09876e39c6939f2da0f08
调整 MSVC 构建脚本以解析 Makefiles 中的定义。此调整 MSVC 构建脚本以查看 Makefile 中提到的编译标志以查找 -D 参数,以便确定应在 Visual Studio 版本中定义哪些常量。此更改导致出现一个小的异常,即 ltree contrib 模块的 Makefile 定义了 LOWER_NODE,但这在 MSVC 构建脚本中未正确定义。这意味着与使用 make 构建环境相比,MSVC 构建在 ltree 模块中的大小写敏感性会有所不同。为了在此处保持相同的行为,我们从 Makefile 中删除了 -DLOWER_NODE,并且仅在 ltree.h 中为非 MSVC 构建始终定义它。我们需要在此处保持旧的行为,因为这会影响使用 ltree 类型时 GiST 索引的磁盘兼容性。此处的唯一其他结果更改是,现在为 autoinc、insert_username 和 moddatetime contrib 模块定义了 REFINT_VERBOSE。以前在 MSVC 上,仅为 refint 模块定义了此项。这使行为与使用 make 的构建环境保持一致,因为所有 4 个模块都共享相同的 Makefile。复核人:Tom Lane 讨论:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/245de48455daaf51f2f3e8b198d87b5dd9fd4516
Tom Lane 推送了
加强 pg_stat_statements 测试,以应对 CLOBBER_CACHE_ALWAYS。事实证明,构建农场尚未对此进行测试,但这种情况很快会改变。Julien Rouhaud,根据我的报告。讨论:https://postgr.es/m/42557.1627229005@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0806d08d4626f0a71a4e83cb399ee965a8aac99b
在 EXPLAIN 及相关输出中使用 “pg_temp” 模式别名。此补丁导致 EXPLAIN 输出使用 “pg_temp” 模式别名来引用当前会话临时模式中的对象,而不是该模式的实际名称。这对我们自己的测试目的很有用,因为它将稳定此类情况下的 EXPLAIN VERBOSE 输出,使我们能够在回归测试中使用它。这对最终用户来说也应该不那么令人困惑。由于 ruleutils.c 需要更改行为,因此该更改也会影响 ruleutils.c 的其他一些用户,例如 pg_get_viewdef()。我认为这不会引起任何问题。我们发现,如果试图全面地更改此行为会导致问题,但只要 “pg_temp” 仅出现在生成的 SQL 文本中,我认为就不会有问题。在此过程中,使 get_namespace_name_or_temp 符合与 get_namespace_name 相同的 API,即它返回一个 palloc'd 字符串或 NULL。当前行为没有导致任何错误,因为没有调用者尝试 pfree 结果,但如果它得到更广泛的使用,则可能会成为一个问题。Amul Sul,由我审查并扩展。讨论:https://postgr.es/m/CAAJ_b97W=QaGmag9AhWNbmx3uEYsNkXWL+OVW1_E1D3BtgWvtw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/48c5c9068211e0a04fd9553c8714b2821ed3ad17
在事件触发器中,仅对我们自己的临时模式使用 “pg_temp”。pg_event_trigger_ddl_commands 使用 “pg_temp” 来引用任何临时模式,而不仅仅是当前后端的临时模式。这似乎有点过度。DDL 命令首先引用其他会话的临时对象似乎不太可能,但如果确实发生了,那么 “pg_temp” 将是一种极具误导性的显示操作方式。虽然这似乎是一个错误,但有人期望当前行为也不是完全不可能的。因此,在 HEAD 中修复,但不进行向后移植。讨论:https://postgr.es/m/CAAJ_b97W=QaGmag9AhWNbmx3uEYsNkXWL+OVW1_E1D3BtgWvtw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/024515cac50e246d92bbe67e9de4da0f302972ef
稳定新回归测试的输出。提交 48c5c9068 未考虑强制 jit = on 的构建农场动物。我很惊讶这在 explain.sql 中的其他地方没有出现,因此为整个测试脚本关闭它,而不仅仅是一个新的测试用例。根据构建农场。https://git.postgresql.org/pg/commitdiff/674f6fe8e65a37289432fa373e5d742a36751ae8
修复多范围的多态参数解析中的错误。我们未能处理 anycompatiblemultirange 的 UNKNOWN 类型输入;这应该抛出一个错误,表明我们不知道如何解析多范围类型。我们还未能从 anycompatiblemultirange 输入推断 anycompatiblerange 输出的类型,反之亦然。根据 Alexander Lakhin 的错误 #17066。向后移植到添加多范围的 v14。讨论:https://postgr.es/m/17066-16a37f6223a8470b@postgresql.org https://git.postgresql.org/pg/commitdiff/336ea6e6ff1109e7b83370565e3cb211804fda0c
改进 libpq 在错误消息构造期间对 OOM 的处理。提交 ffa2e4670 更改了 libpq,以便在一次操作(连接尝试或查询)期间发生的多个错误报告会累积在 conn->errorMessage 中,而以前的新错误通常会替换任何先前的错误。至少在理论上,这会使我们更容易因 errorMessage 缓冲区而耗尽内存。如果确实发生这种情况,用户将只剩下空字符串错误报告,这非常无济于事。我们可以通过依靠 pqexpbuffer.c 现有的 “损坏缓冲区” 约定来跟踪我们是否为当前操作的错误字符串遇到 OOM,然后在读取 errorMessage 的少数几个地方替换一个常量 “内存不足” 字符串来改进这种情况。同时,将相同的方法应用于 pqInternalNotice 和 pqGetErrorNotice3 中类似的 OOM 情况。向后移植到 ffa2e4670 进入的 v14。原则上,这可以更早地回溯;但考虑到缺乏现场报告,这种危险在较旧的分支中似乎可以忽略不计。讨论:https://postgr.es/m/530153.1627425648@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/514b4c11d24701d2cc90ad75ed787bf1380af673
在 postgres_fdw 中,允许将 CASE 表达式推送到远程服务器。这很简单,除了需要检查 CaseTestExpr 节点是否具有不是从远程 Var 派生的排序规则。为此,请检查 CASE 的 “arg” 表达式,然后将该信息传递到 WHEN 表达式的递归检查中。Alexander Pyhalov,由 Gilles Darold 和我审查。讨论:https://postgr.es/m/fda09032e90d85d9b726a41e03f9097f@postgrespro.ru https://git.postgresql.org/pg/commitdiff/5d44fff01eebfe0c7a118326605864e662a44f46
文档:为 “域” 添加一个术语表条目。Anton Voloshin 和 Jürgen Purtz,由 Laurenz Albe 审查。讨论:https://postgr.es/m/2ea65bdf-1380-f088-02bd-ff1a31ed265c@postgrespro.ru https://git.postgresql.org/pg/commitdiff/3dddb2a8219d3cfd163a83561d4b4613cd2ea376
使用 elog,而不是 Assert,来报告未能提供外部快照的情况。从提交 84f5c2908 开始,执行 SQL 命令(通过 SPI 或其他方式)需要具有活动 Portal 或调用者建立的活动快照。我们只是断言了这种情况。但是,我们现在已经收到了一些不同的报告,称人们正在测试不符合此要求的扩展,并且对由此导致的崩溃感到困惑。让我们将 Assert 转换为测试和 elog,希望能使扩展作者更清楚地了解问题。根据 Liu Huailing 和 RekGRpth 的抱怨。像之前的提交一样,向后移植到 v11。讨论:https://postgr.es/m/OSZPR01MB6215671E3C5956A034A080DFBEEC9@OSZPR01MB6215.jpnprd01.prod.outlook.com 讨论:https://postgr.es/m/17035-14607d308ac8643c@postgresql.org https://git.postgresql.org/pg/commitdiff/ef12f32c0870b73ab7589ffc178094ac9ba3e84f
文档:按字母顺序排列 9.7.3 中的 regexp_foo() 函数描述。毫无明显的原因(无疑是历史上的巧合),regexp_replace() 的顺序不对。重新排序以匹配这些函数在 9.4 中的列出方式。(这意味着 substring() 仍然排在第一位,因为它是 SQL 标准的,其余的不是。)我没有修改文本,只是移动了它。这只是为了减少即将添加内容时的差异所造成的混乱。https://git.postgresql.org/pg/commitdiff/64a1f225654f8866422010ff28e0d3384ae4c3af
Dean Rasheed 推送了
允许数值刻度为负数或大于精度。以前,当指定 NUMERIC(precision, scale) 时,刻度必须在 [0, precision] 范围内,这是按照 SQL 规范进行的。此提交将允许的刻度范围扩展到 [-1000, 1000],与精度无关(其有效范围仍为 [1, 1000])。负刻度意味着在小数点之前进行舍入。例如,可以使用 -3 的刻度声明一个列,以将值舍入到最接近的千位。请注意,显示刻度仍为非负数,因此在这种情况下,显示刻度将为零,并且将显示小数点之前的所有数字。大于精度的刻度支持小数点后紧跟零的小数值。借此机会整理打包、解包和验证 typmod 整数内容的代码,将其封装在一小组新的内联函数中。由于数值列的 atttypmod 允许的内容已更改,因此增加了 catversion。这不是需要重新 initdb 的更改,但 typmod 中的负刻度值会使旧的后端感到困惑。Dean Rasheed,Tom Lane 进行了额外的改进。由 Tom Lane 审查。讨论:https://postgr.es/m/CAEZATCWdNLgpKihmURF8nfofP0RFtAKJ7ktY6GcZOPnMfUoRqA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/085f931f52494e1f304e35571924efa6fcdc2b44
修复 numeric_power() 中的边界情况错误和精度损失。这修复了将数字提升到非常大的幂时出现的一些相关问题。首先,当将负数提升到非常大的整数幂时,结果应该是明确定义的,但之前的代码仅在指数足够小以至于可以通过 power_var_int() 时才能处理。否则,它会抛出内部错误,试图获取负数的对数。通过在 power_var() 中的一般情况下添加合适的处理来处理负基数,从而修复此问题,并在那里检查整数幂。接下来,当将绝对值略小于 1 的(正或负)数提升到非常大的幂时,结果应随着幂的增加而接近零。但是,在某些情况下,对于足够大的幂,这将失去所有精度并返回 1 而不是 0。这是由于为最终全精度计算而计算 local_rscale 的方式所致:local_rscale = rscale + (int) val - ln_dweight + 8。右侧的前两项旨在给出结果中所需的有效位数(“val” 是估计的结果权重)。但是,这未能考虑到 rscale 被限制为 NUMERIC_MAX_DISPLAY_SCALE (1000) 的最大值,并且结果权重可能小于 -1000,导致它们的和为负数,从而导致精度损失。通过强制计算的有效位数非负来解决此问题。它可以为零(当结果权重小于 -1000 时),因为 local_rscale 值然后包含一些额外的数字以确保准确的结果。最后,向 exp_var() 和 power_var() 添加额外的下溢检查,以便它们在结果与零无法区分的情况下始终如一地返回零。此代码的一些路径在这些情况下已经返回零,但其他路径则抛出溢出错误。Dean Rasheed,由 Yugo Nagata 审查。讨论:http://postgr.es/m/CAEZATCW6Dvq7+3wN3tt5jLj-FyOcUgT5xNoOqce5=6Su0bCR0w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4dd5ce2fd9b9b2134886fee7fe4cb36d1988adb2
Tomáš Vondra 推送了
Álvaro Herrera 推送
删除新添加的无用断言检查。Coverity 抱怨说,我的提交 80ba4bb38353 为一致性检查添加了可疑代码,即对于某个 tgrelid/tgparentid 组合不存在多行。但是,我们没有在其他任何地方显式检查它,如果要这样做,它应该是一个完整的“不应该发生”的 elog,而不仅仅是一个断言。无论如何,这似乎不是很重要,所以删除它。讨论:https://postgr.es/m/1337562.1627224583@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/21b3aa9c8faf39ef45a5223681d8947e0a00e7da
在删除相关的配置行时设置 pg_setting.pending_restart。这改变了在更改需要重启的配置选项后检查 pg_file_settings 视图的行为。用户需要知道,任何此类选项的更改在重启之前都不会生效,如果编辑该行而不删除它,则此操作可以正常工作。但是,对于完全删除该行的情况,该标志不会被设置,因为该标志仅在 set_config_option 中设置,而对于删除的行则不会调用该标志。修复。(参考:提交 62d16c7fc561 和 a486e35706ea)作者:Álvaro Herrera alvherre@alvh.no-ip.org 审核人:Daniel Gustafsson daniel@yesql.se 审核人:Tom Lane tgl@sss.pgh.pa.us 讨论:https://postgr.es/m/202107262302.xsfdfc5sb7sh@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/93a0bf2390327a482ff37317f6e17547e735409e
修复复制槽测试代码中的另一个竞争条件。构建场显示,当检查点比预期更早开始时,此测试会进一步失败,因此我们检测到一个“检查点已完成”行,但这不是我们想要的行。更改配置以尝试防止这种情况发生。根据构建场,同时更新提交 d18e75664a2f 中忘记的一个注释。作者:Kyotaro Horiguchi horikyota.ntt@gmail.com 讨论:https://postgr.es/m/20210729.162038.534808353849568395.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/ce197e91d02ca38ac1b956a3e0c11596099e7893
Bruce Momjian 推送
pg_resetxlog:添加用于设置最旧 XID 的选项并供 pg_upgrade 使用。添加 pg_resetxlog -u 选项以在 pg_control 中设置最旧的 xid。以前,-x 将此值设置为比 -x 值小 20 亿。但是,这会导致服务器立即扫描所有关系的 relfrozenxid,以便将 pg_control 的最旧 xid 提升到 autovacuum_freeze_max_age 范围内,这效率低下,并且可能会中断诊断恢复。pg_upgrade 将使用此选项来更好地创建与旧集群匹配的新集群。由 Jason Harvey 和 Floris Van Nee 报告。讨论:https://postgr.es/m/20190615183759.GB239428@rfd.leadboat.com, 87da83168c644fd9aae38f546cc70295@opammb0562.comp.optiver.com 作者:Bertrand Drouvot 反向移植:9.6 https://git.postgresql.org/pg/commitdiff/74cf7d46a91d601e0f8d957a7edbaeeb7df83efc
doc:对于各种子字符串函数,记录是否只匹配第一个。由 troy@frericks.us 报告。讨论:https://postgr.es/m/162614304115.701.2392941350859387646@wrigleys.postgresql.org 反向移植:13 https://git.postgresql.org/pg/commitdiff/6feebcb6b44631c3dc435e971bd80c2dd218a5ab
Andrew Dunstan 推送
在 pg_upgrade 创建的 Windows 脚本中禁用命令回显。这使得它们更像 Unix 的等效项。讨论:https://postgr.es/m/73deed30-3363-44e9-48a5-98aa66a8a00f@dunslane.net https://git.postgresql.org/pg/commitdiff/91d76613b7ec75b6642accaff91dc7d657e549e9
将 -w 标志重新添加到 PostgresNode 中的 pg_ctl(重新)启动。现在这是 pg_ctl 的默认设置,但是在此处显式添加该标志不会造成任何损害,并且有助于 PostgresNode 模块的向后兼容性。https://git.postgresql.org/pg/commitdiff/b33259e261ae99dc7c503a6a7615bd492047588b
将 adjust_conf 方法添加到 PostgresNode。此方法将修改或删除配置文件中的现有行,而不是简单地附加到文件。这使得调整旧版本的文件更加简单和紧凑。https://git.postgresql.org/pg/commitdiff/dbfe6e4b1766369654e20113b0cab79bd939d544
统一 PostgresNode 的 new() 和 get_new_node() 方法。现在 PostgresNode 只有一个构造函数,其惯用名称为“new”。该方法不由类导出,并且必须以“PostgresNode->new('name', [args])”的形式调用。相应地修改所有使用 PostgresNode 的 TAP 测试。第三方脚本将需要调整,这是一个相当机械的过程(我只是使用了一个 sed 脚本)。https://git.postgresql.org/pg/commitdiff/201a76183e2056c2217129e12d68c25ec9c559c8
为 PostgresNode 的 install_path 添加一个 getter 函数。经验表明这很有用,虽然不是绝对必要的,但我们通常不应该公开 PostgresNode 对象的内部结构。https://git.postgresql.org/pg/commitdiff/87076c40834c2971f073f69be33a5f95ffa8f8a1
添加 PostgresVersion.pm 方法以发出主版本字符串。对于 10 之前的版本,这将生成点分隔的表示法,除非给定分隔符参数,在这种情况下将使用该参数。https://git.postgresql.org/pg/commitdiff/1e8d89f8800e0aaafc66e87e8e5fedf5dbd038cf
从 PostgresNode 中删除 Exporter 的最后残余。想要调用 get_free_port 的客户端现在需要通过限定名称:PostgresNode::get_free_port() 来调用。https://git.postgresql.org/pg/commitdiff/5dc932f9e7b7d1992abd33d1c519899dd1c30272
避免对符号链接的目录调用 TestLib::perl2host。已观察到某些版本的 msys2/Windows 会在 perl2host 中解析符号链接,而不是仅仅跟随它们。这会破坏使用指向较长路径的符号链接较短路径,并导致某些测试失败。因此,我们在符号链接的父目录上调用 perl2host,然后仅使用该结果。应用于已观察到此问题的 14 版本。https://git.postgresql.org/pg/commitdiff/b35a67bc04243da609843949c53e6841e748243a
使 TestLib::perl2host 更加一致和健壮。有时,观察到 cygpath 返回带有尾部斜杠的路径。这可能会导致问题。此外,在正斜杠的使用方面,使“cygpath”的使用与“pwd -W”保持一致。反向移植到引入当前代码的 14 版本。https://git.postgresql.org/pg/commitdiff/bad106752272c05de5a56036b8a84ae6ff3249a0
消除有关未初始化值的 perl 警告。https://git.postgresql.org/pg/commitdiff/0d1401931868e03342ed4689b5af2522eb40f750
藤井正雄 推送
避免在错误消息中使用模棱两可的词“非负数”。使用“非负数”这个词的错误消息令人困惑,因为它在是否接受零的问题上模棱两可。此提交通过将其替换为不太模棱两可的词(例如“大于零”或“大于或等于零”)来改进这些错误消息。此外,此提交还在错误消息样式指南中添加了有关“非负数”一词的注释,以帮助编写新的错误消息。当 postgres_fdw 选项 fetch_size 设置为零时,以前会报告错误消息“fetch_size 需要一个非负整数值”。此错误消息完全有缺陷。因此,反向移植到所有支持的版本,在这些版本中可能会抛出此类有缺陷的错误消息。由侯志杰报告。作者:Bharath Rupireddy 审核人:Kyotaro Horiguchi,藤井正雄 讨论:https://postgr.es/m/OS0PR01MB5716415335A06B489F1B3A8194569@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/0e1275fb073cbbff2185f4067d67785e56941e50
在中止记录的 WAL 重放期间,更新截断时的最小恢复点。如果文件被截断,我们必须更新 minRecoveryPoint。一旦文件被截断,就无法回头;在早于该点的点停止恢复将不再安全。提交 7bffc9b7bf 更改了 xact_redo_commit(),使其在截断时更新 minRecoveryPoint,但忘记更改 xact_redo_abort()。反向移植到所有支持的版本。由 mengjuan.cmj@alibaba-inc.com 报告。作者:藤井正雄 审核人:Heikki Linnakangas 讨论:https://postgr.es/m/b029fce3-4fac-4265-968e-16f36ff4d075.mengjuan.cmj@alibaba-inc.com https://git.postgresql.org/pg/commitdiff/a00c138b78521b9bc68b480490a8d601ecdeb816
John Naylor 推送
禁止在 date_bin() 中使用负步长。不清楚负步长的语义是什么,因此抛出一个错误来代替。根据 Bauyrzhan Sakhariyev 的报告。审核人:Tom Lane,Michael Paquier 讨论:https://postgres.ac.cn/message-id/CAKpL73vZmLuFVuwF26FJ%2BNk11PVHhAnQRoREFcA03x7znRoFvA%40mail.gmail.com 反向移植到 v14 https://git.postgresql.org/pg/commitdiff/3ba70d4e152372fd8ab90ed0887ee08d505ef306
修复 ECPG 数值到整数转换中的范围检查。之前的代码防止 -INT_MAX 而不是 INT_MIN,导致 -2147483648 被拒绝为超出范围。根据 Kevin Sweet 的错误 #17128。讨论:https://postgres.ac.cn/message-id/flat/17128-55a8a879727a3e3a%40postgresql.org 审核人:Tom Lane 反向移植到所有支持的分支 https://git.postgresql.org/pg/commitdiff/5fcf3945bd90bb0170938ad780159779367dc8ac
删除对 pg_attribute.attcompression 的冗余设置。自 e6241d8e0 以来,在 initdb 期间,没有属性需要此项的非默认值,因此让通常的默认机制来处理它。https://git.postgresql.org/pg/commitdiff/89404a01b4dadab8231dfa08cab507191c2ac929
Daniel Gustafsson 推送
从 test/ssl .gitignore 中删除未使用的目录。测试运行中保存的客户端日志已在 1caef31d9 中删除,但 .gitignore 文件中的条目仍然存在。虽然这也存在于旧分支中,但这主要是外观上的修复,因此没有进行反向移植。审核人:Michael Paquier 讨论:https://postgr.es/m/F8E73040-BB6F-43BF-95B4-3CEC037BE856@yesql.se https://git.postgresql.org/pg/commitdiff/454ae15d10ea2d11669b69e82c98fbd03126fd69
docs:修复 bit_count 示例输出。bit_count(::bytea) 示例的返回值假定 standard_conforming_strings 的非默认值。这在提交 ebedd0c78 的测试中已修复。作者:wangzk.fnstxz@fujitsu.com 讨论:https://postgr.es/m/OSZPR01MB6551FFAC1088C82C3D799BE0FAEB9@OSZPR01MB6551.jpnprd01.prod.outlook.com 反向移植:14 https://git.postgresql.org/pg/commitdiff/fcf4c0ae1db8594cf3d3e84d2564616497eecd5a
Amit Kapila 推送
重构以在 proto.c 和 worker.c 中创建通用函数。这只是一个非功能性的更改,用于重构代码,以将一些复制逻辑提取到静态函数中。这是为 2PC 流补丁做准备,该补丁也共享此通用逻辑。作者:Peter Smith 审核人:Amit Kapila 讨论:https://postgr.es/m/CAHut+PuiSA8AiLcE2N5StzSKs46SQEP_vDOUD5fX2XCVtfZ7mQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/91f9861242cd7dcf28fae216b1d8b47551c9159d
删除 apply_handle_commit_internal() 中未使用的参数。提交 0926e96c49 中的疏忽。作者:Masahiko Sawada 审核人:Amit Kapila 反向移植:14,该参数是在 14 中引入的。讨论:https://postgr.es/m/CAD21AoDeScrsHhLyEPYqN3sydg6PxAPVBboK=30xJfUVihNZDA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/16bd4becee32240d09db5c6cbec87957fdfcd2d9
Etsuro Fujita 推送
Heikki Linnakangas 推送了
更新仍引用 CheckpointLock 的过时注释。CheckpointLock 已在 commit d18e75664a 中删除,并且 commit ce197e91d0 更新了 CreateCheckPoint 中的剩余注释,但 CreateRestartPoint 中还有另一份副本。https://git.postgresql.org/pg/commitdiff/df9f0c716cc75d9842b3de79159b9191c108987c
在打开信号文件以进行 fsync 时,不要使用 O_SYNC 或类似的东西。当我们对文件调用 pg_fsync() 时,无需使用 get_sync_bit()。我们不会写入文件,因此在实践中没有任何区别,但这样看起来不那么令人惊讶。由 Andres Freund 审查 讨论:https://postgres.ac.cn/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/e9f5a0681cb9cf74b4c1c98e10182ccce04aa08c
删除不必要的 'restoredFromArchive' 全局变量。它可能对调试很有用,但没关系。还有 'readSource',它的作用几乎相同。由 Andres Freund 审查 讨论:https://postgres.ac.cn/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/6b16532811f07fbb58e4b1b248775acbf9f732a2
提取描述恢复停止原因的代码到一个函数。StartupXLOG() 非常长,这使其更具可读性。由 Andres Freund 审查 讨论:https://postgres.ac.cn/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/4fe8dcdff3af73f6ca16eb3edfa3339c7ee0d2c4
将 InRecovery 和 standbyState 全局变量移动到 xlogutils.c。它们在正常操作和 WAL 重放期间运行的代码中使用,并且在重放期间需要表现不同。将它们移动到 xlogutils.c,因为这是我们拥有由重做例程使用的其他辅助函数的地方。由 Andres Freund 审查 讨论:https://postgres.ac.cn/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/317632f3073fc06047a42075eb5e28a9577a4f96
Robert Haas 推送了
Jeff Davis 推送了
Bharath Rupireddy 发送了另一个补丁修订版,通过区分未记录表的错误消息和临时表的错误消息来改进发布错误消息。
Daniel Gustafsson 发送了另一个补丁修订版,以支持 NSS 作为 libpq TLS 后端。
David Fetter 和 Greg Nancarrow 交换了补丁,以使用更少的指令来查找用于格式化的整数的十进制长度。
John Naylor 发送了另外两个补丁修订版,以添加用于验证 UTF-8 文本的快速路径。
Justin Pryzby 和 Bharath Rupireddy 交换了补丁,以使在启动过程中可以记录事件。
Haiying Tang 和 Vigneshwaran C 交换了补丁,以向 PUBLICATION 添加模式级别的粒度。
Nathan Bossart 发送了另外两个补丁修订版,以澄清 initdb --sync-only 帮助消息和文档。
Amit Langote 发送了另一个补丁修订版,以允许在跨分区更新期间批量插入。
Andrey V. Lepikhov 发送了另一个补丁修订版,以删除不必要的自连接。
David Rowley 发送了另一个补丁修订版,用于 postgres_fdw,以向某些远程 SQL 查询添加 ORDER BY。
Peter Smith 发送了另一个补丁修订版,以添加逻辑复制的行过滤。
Daniel Westermann 发送了一个补丁,以修复一个拼写错误。
Amit Langote 发送了一个补丁,用于在 src/backend/executor/nodeModifyTable.c:ExecInsert 中为计划使用单独的 tupledesc 结构。
Dagfinn Ilmari Mannsåker 发送了一个补丁,通过禁止在 void 上下文中映射和 grep 来符合 perlcritic。
Dipesh Pandit 发送了另一个补丁修订版,以缓解 WAL 存档器的性能杀手目录扫描。
Bertrand Drouvot 发送了另一个补丁修订版,以使可以在备用机上进行逻辑解码。
Bharath Rupireddy 发送了另一个补丁修订版,用于为 {pre, post}_auth_delay
使用 WaitLatch。
Daniel Gustafsson 和 Jacob Champion 交换了补丁,以重做 sslfiles Makefile 目标。
Bruce Momjian 发送了另外四个补丁修订版,以修复间隔算术处理方式的一些问题。
Peter Smith 发送了另外两个补丁修订版,以添加对流事务的准备 API 支持。
Pavel Stěhule 发送了另一个补丁修订版,以向 pg_dump 添加 --options-file 选项和支持机制。
Pavel Stěhule 发送了另一个补丁修订版,以向 pg_dump 添加过滤。
Pavel Stěhule 发送了另一个补丁修订版,以在 plpgsql 调试 API 中返回变量内容的文本值。
Michaël Paquier 发送了一个补丁,用于在 CREATE SEQUENCE 中记录 RESTART,同时根据 START 描述其行为。
Daniel Gustafsson 发送了另一个补丁修订版,以在 post-copy errmsg 中发出命名空间。
Melanie Plageman 发送了一个补丁,用于为 AIO bitmapheapscan 使用 pgsr。
Yugo Nagata 发送了另一个补丁修订版,用于 pgbench,以防止它不必要地中止。
Amit Langote 发送了另一个补丁修订版,以重做查询关系权限检查,方法是将权限检查信息从范围表条目移动到一个名为 RelPermissionInfo 的新节点类型,从而避免了对范围表的多次搜索。
Ronan Dunklau 发送了一个补丁,以添加 READ_REPLICATION_SLOT 命令,该命令将在物理复制连接的上下文中使用,并在 pg_receivewal 中使用相同命令以获得所需的 start_lsn 的更好估计。
Daniil Zakhlystov 发送了一个补丁,以添加 zlib 和 zstd 流压缩,并在实现 libpq 压缩时使用相同的方法。
Hayato Kuroda 发送了一个补丁,以将本地 pid 添加到 fallback_application_name。
Masahiko Sawada 发送了另外两个补丁修订版,以向应用逻辑复制更改中的错误添加 errcontext,添加 pg_stat_logical_replication_error 统计信息视图,并向 ALTER SUBSCRIPTION 添加 skip_xid 选项。
Yura Sokolov 发送了一个补丁,向 bdbench 添加一个 integerset2 实现,旨在改进惰性 vacuum 的死元组存储。
RGU 发送了一个补丁,以收集子问题最上面的扫描/连接关系的局部路径。
Dean Rasheed 发送了一个补丁,以避免 to_char 中不正确的除以零错误。
Prabhat Sahu 发送了一个补丁,以添加禁止 wal 的 TAP 测试。
John Naylor 发送了另一个补丁修订版,以加速常见类型的元组排序。
Daniel Gustafsson 发送了另一个补丁修订版,以修复 pg_basebackup 和 pg_dump 中的 sscanf 限制,并修复 TOC 文件错误消息打印中的错误,该错误有时未能包含发生错误的文件的名称。
Tomáš Vondra 发送了另一个补丁修订版,以向逻辑复制添加对序列的操作。
Melanie Plageman 发送了另一个补丁修订版,以修复并行哈希连接批处理清理中的竞争条件,澄清并行哈希连接阶段的命名,并使可以在完整和右外连接上使用并行哈希。
Hou Zhijie 发送了一个补丁,以删除 maybe_send_schema 中未使用的参数。
David Rowley 和 Tomáš Vondra 交换了补丁,以使用生成上下文来加速元组排序。
Álvaro Herrera 发送了另一个补丁修订版,以避免过早创建存档状态 ".ready" 文件。
Heikki Linnakangas 发送了另外三个补丁修订版,以在 StartupXLOG() 中移动代码,将 xlog.c 分割为 xlog.c 和 xlogrecovery.c,并将应用一个 WAL 记录的代码移动到子例程中。
Ajin Cherian 发送了一个补丁,以修复 021_twophase tap 测试中可能发生的失败,方法是更改测试,以便它等待两个订阅都赶上,然后再检查准备好的事务计数。
Gilles Darold 发送了另一个补丁修订版,以添加函数 regexp_count、regexp_instr 和 regexp_like,并向 regexp_replace 和 regexp_substr 添加新参数,以使其可以指定位置和出现次数。
Tomáš Vondra 发送了另一个补丁修订版,以提高 slab 分配器的性能。
David Rowley 发送了另一个补丁修订版,以跟踪 RelOptInfo 中未修剪的分区,并允许在更多情况下进行有序分区扫描。
Vigneshwaran C 发送了另一个补丁修订版,以包括逻辑复制消息格式文档中使用的实际数据类型。