Planet PostgreSQL:
https://planet.postgresql.org/
修复 src/bin/pg_basebackup/ 中的一些内存泄漏。这些已经由 7fbe0c8 引入,并且可能发生在 pg_basebackup 和 pg_receivewal 上。根据 Coverity 对 walmethods.c 中的报告,我在经过更多审查后发现了 receivelog.c 中的那些。https://git.postgresql.org/pg/commitdiff/4ef64c425dbcda151c9f163aadff982343808e09doc:修复命令示例以使用 PGOPTIONS 运行回归测试。该文档提到了 log_checkpoints 的使用,不能在此上下文中使用。此提交将 log_checkpoints 替换为 force_parallel_mode,这是一个用于执行与并行性相关的检查的开发人员选项。854434c 中的监督。Discussion: https://postgr.es/m/OS0PR01MB6113954B883ACEB2DDC973F2FBE59@OS0PR01MB6113.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/efe080220942fb8c2fdca66a3ab436159f7db86bstrtoint() 通过 strtol() 将跳过前导空格,但相同的规则不适用于尾随空格,从而导致不一致的行为。更改了一些测试以覆盖更多这方面的内容。Reviewed-by: Kyotaro Horiguchi Discussion: https://postgr.es/m/YP5Pv0d13Ct+03ve@paquier.xyz https://git.postgresql.org/pg/commitdiff/f7a9a3d4b24a4ad0de7992f01a0dd2a02ccd30a4在 pg_receivewal 的 TAP 测试中简化匹配模式检查。在测试的 ZLIB 部分中使用 m// 来匹配未压缩部分段的名称与完整的压缩段的检查,而简单的相等性检查就足够了。Author: Kyotaro Horiguchi Discussion: 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 层,使这个实现变得简单。Author: Justin Pryzby, Jeff DavisReviewed-by: Michael Paquier, Vignesh C Discussion: https://postgr.es/m/20210228222530.GD20769@telsasoft.com https://git.postgresql.org/pg/commitdiff/b0483263dda0824cc49e3f8a022dab07e1cdf9a7澄清一些使用 leetpeak 术语“up2date”的评论。其中大部分是新的,从 a8fd13c 开始,“最新的”对于普通读者来说更容易解析。Discussion:https://postgr.es/m/CAHut+PtHbHvgOjs_R9LyDF21j-Wn8SxoTtWMQNP2ifXN6t2cSg@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/7b7fbe1e8bb4b2a244d1faa618789db411316e55找不到 pg_waldump 时,在 pg_verifybackup 中添加缺少的 exit()。pg_verifybackup 默认需要 pg_waldump 检查备份所需的一系列 WAL 段,除非指定了 --no-parse-wal 。该代码检查了安装中是否存在二进制 pg_waldump 并报告了错误,但它忘记正确地exit()。这可能会导致报告的令人困惑的错误。Reviewed-by: Robert Haas, Fabien Coelho Discussion: https://postgr.es/m/YQDMdB+B68yePFeT@paquier.xyz https://git.postgresql.org/pg/commitdiff/2ad98fdf53edf1a90123e3b189cc6f0a31986891在各种二进制文件的错误路径中添加一些缺少的 exit() 调用。完成以下更改:- 在 pg_archivecleanup 中,旧 WAL 段的清理永远不会立即失败。 在 pgbench 中,线程屏障的初始化不会很难失败。在 pg_recvlogical 中,stat() 失败从未得到调用。在 pg_basebackup 中,两个 chmod() 在解压一些新收到的 tar 数据时报告了一个失败而没有 exit()'ing。即使在此失败之后,仍有可能继续写入一些数据,但这最终可能会让用户感到困惑。这些可以说是错误,但它们会发生在不太可能发生故障的代码路径中,因此没有进行回补。Reviewed-by: Robert Haas, Fabien Coelho Discussion: https://postgr.es/m/YQDMdB+B68yePFeT@paquier.xyz https://git.postgresql.org/pg/commitdiff/856de3b39cf6041338b286a99257c324ce647f4e修复tab-complete.c中的错字。 在b048326介绍了。 Discussion: https://postgr.es/m/10785e3e9456a5d761164d3e60d9c4981b80e321.camel@j-davis.com https://git.postgresql.org/pg/commitdiff/15c6ede04577f856f702bf0a032297de667f382a在 TAP 测试中对 pg_receivewal --endpos 的新调用使用 --no-loop。这些测试并不是为了失败而设计的,但是如果失败了,就像在 Windows 的某些情况下因为 ZLIB (?),它们可能会卡住。使用 --no-loop 会使测试立即失败。最古老的 --endpos 测试已经做到了。这些测试已添加到 ffc9dda 中。 Reviewed-by: Andrew DunstanDiscussion:https://postgr.es/m/ec093ff1-a53c-0091-46a2-4537354b0dd4@dunslane.net https://git.postgresql.org/pg/commitdiff/3df93a66593c344e6298e618df3fa5090fca4309在 Windows 上为 ZLIB 启用 pg_receivewal 的 TAP 测试,需要三个。这将恢复提交 6a2c532。Fairywren 和 bowerbird 由于链接到的 ZLIB 版本不正确而未能通过这些测试,从而导致诸如 SIGBREAK 停止 buildfarm 运行或写入压缩 WAL 段时 EACCES 失败等错误。Andrew Dunstan 在这里完成了所有调查,因此能够在 Windows 上启用这些测试是他应得的功劳。Discussion:https://postgr.es/m/9040d5ed-6462-66a4-07ac-2923785ae563@dunslane.net https://git.postgresql.org/pg/commitdiff/0b8ea707580640f9d5562de77f4b563fa9131547修复 get_agg_clause_costs 的错误注释。
调整 get_agg_clause_costs 中的标题注释,使其与函数当前执行的操作相匹配。从 0a2bc5d61 开始就没有进行递归搜索。它也不像声称的评论那样确定 aggtranstype。这一切都在 preprocess_aggref() 中完成。preprocess_aggref 现在也确定了 numOrderedAggs,因此删除 get_agg_clause_costs 也计算“计数”的提及。通常,由于这只是对注释的调整,因此可能不值得重新修补,但由于此代码是 PG14 的新代码并且该版本仍处于测试阶段,因此似乎值得让注释匹配。Discussion: https://postgr.es/m/CAApHDvrrGrTJFPELrjx0CnDtz9B7Jy2XYW3Z2BKifAWLSaJYwQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2b58f894e56a1944e824e19c92337d6bf24d9c41这似乎是在 ee3b4188a 中添加的,但考虑到 18 个月前的 320c7eb8c 添加了将 fmgroids.h 复制到 src/include/utils 的代码,为什么甚至需要在该提交中进行更改的原因有点不清楚。amcheck 似乎没有添加额外的包含目录就可以逃脱,所以也许 dblink 也可以逃脱它。这个在我的 VS2017 环境中构建正常,但是buildfarm可能会提醒我们为什么需要ee3b4188a。 只有一个办法能确定。Discussion:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4b763ff642e1a3608cbcaff062f6c2f465bfc6bd DOC:文档:阐明在 ATTACH PARTITION 期间采取的锁定级别。在 ATTACH PARTITION 操作期间,DEFAULT 分区上将持有哪些锁级别(如果有)并不是很清楚。此外,如果 DEFAULT 分区或附加的表本身是分区表,请说明将采用哪些锁。在这里,我只是像以前一样回补到 v12,然后我们在分区表上获得了一个 ACCESS EXCLUSIVE 锁。
当分区表本身被 ACCESS EXCLUSIVE 锁锁定时,提及对其他表采取哪些锁似乎不太相关。Author: Matthias van de Meent, David Rowley Discussion:https://postgr.es/m/CAEze2WiTB6iwrV8W_J=fnrnZ7fowW3qu-8iQ8zCHP3FiQ6+o-A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8709228775b549a2388e6568f463a4115e5a4c10在 MSVC 构建脚本中一致地使用 AddFile 函数。我们似乎混合使用手动添加到“文件”哈希和调用 Addfile() 方法。让我们一直使用 AddFile()。Reviewed-by: Dagfinn Ilmari Mannsåker Discussion: https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ed1884a2fedeffd2e6902451a9d41f4b3f6e859f以前,'includes' 字段是一个字符串。当它被定义为一个数组时,管理它会稍微好一些。这使我们能够更轻松地检测和消除重复项。Reviewed-by: Álvaro Herrera, Andrew Dunstan, Dagfinn Ilmari Mannsåker Discussion:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/33d74c5d00e45248df66fa1bcd9222e0713ea5b1为了不重复由 MSVC 构建脚本生成的 Visual Studio 项目文件中的引用和库,请让它们在再次添加相同的引用或库之前检查特定引用或库是否已存在。Reviewed-by: Álvaro Herrera, Andrew Dunstan, Dagfinn Ilmari Mannsåker Discussion:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/15f16ec6511cf50374b09876e39c6939f2da0f08调整 MSVC 构建脚本以解析 Makefile 以获取定义。这会调整 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。iscussion:https://postgr.es/m/CAApHDvpo6g5csCTjc_0C7DMvgFPomVb0Rh-AcW5afd=Ya=LRuw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/245de48455daaf51f2f3e8b198d87b5dd9fd4516 强化针对 CLOBBER_CACHE_ALWAYS 的 pg_stat_statements 测试。
事实证明,buildfarm 还没有对此进行测试,这很快就会改变。
Julien Rouhaud, per report from me Discussion: 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()。
不会造成任何问题的 AFAICS。我们确实发现积极尝试全面改变这种行为会导致问题,但只要“pg_temp”只出现在生成的 SQL 文本中,我认为它' 会好的。在此过程中,使 get_namespace_name_or_temp 符合与 get_namespace_name 相同的 API,即它返回一个 palloc'd 字符串或 NULL。当前的行为没有引起任何错误,因为没有调用者试图释放结果,但如果它得到更广泛的使用,这可能会成为一个问题。Amul Sul, reviewed and extended by me Discussion: 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 中修复,但不要回补丁。Discussion: https://postgr.es/m/CAAJ_b97W=QaGmag9AhWNbmx3uEYsNkXWL+OVW1_E1D3BtgWvtw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/024515cac50e246d92bbe67e9de4da0f302972ef提交 48c5c9068 未能允许强制 jit = on 的 buildfarm 动物。我很惊讶这在explain.sql 的其他地方没有出现,所以关闭整个测试脚本而不仅仅是一个新的测试用例。https://git.postgresql.org/pg/commitdiff/674f6fe8e65a37289432fa373e5d742a36751ae8我们未能处理任何兼容多范围的 UNKNOWN 类型的输入;这应该抛出一个错误,表明我们不知道如何解析多范围类型。我们也未能从 anycompatiblemultirange 输入推断 anycompatiblerange 输出的类型,反之亦然。根据 Alexander Lakhin 的错误 #17066。Discussion: https://postgr.es/m/17066-16a37f6223a8470b@postgresql.org https://git.postgresql.org/pg/commitdiff/336ea6e6ff1109e7b83370565e3cb211804fda0c在错误消息构建期间改进 libpq 对 OOM 的处理。Commit ffa2e4670 更改了 libpq,以便在一次操作(连接尝试或查询)期间发生的多个错误报告累积在 conn->errorMessage 中,在此之前,新报告通常会替换任何先前的错误。至少在理论上,这使我们更容易耗尽 errorMessage 缓冲区的内存。如果确实发生了,用户只会得到一个空字符串的错误报告,这是非常无益的。
我们可以通过依赖 pqexpbuffer.c 现有的“broken buffer”约定来改进这一点,以跟踪我们是否为当前操作的错误字符串命中了 OOM,然后在少数地方替换了一个常量“out of memory”字符串errorMessage 被读出。
在此期间,将相同的方法应用于 pqInternalNotice 和 pqGetErrorNotice3 中类似的 OOM 情况。回补到 v14,其中 ffa2e4670 进来了。
原则上,这可以追溯到更远的地方;但鉴于缺乏现场报告,旧分支机构的危害似乎可以忽略不计。Discussion: https://postgr.es/m/530153.1627425648@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/514b4c11d24701d2cc90ad75ed787bf1380af673
这很简单,除了需要检查 CaseTestExpr 节点是否具有不是从远程 Var 派生的排序规则。为此,请检查 CASE 的“arg”表达式,然后将该信息向下传递到 WHEN 表达式的递归检查中。Alexander Pyhalov, reviewed by Gilles Darold and myself Discussion: https://postgr.es/m/fda09032e90d85d9b726a41e03f9097f@postgrespro.ru https://git.postgresql.org/pg/commitdiff/5d44fff01eebfe0c7a118326605864e662a44f46 Anton Voloshin and Jürgen Purtz, Discussion:https://postgr.es/m/2ea65bdf-1380-f088-02bd-ff1a31ed265c@postgrespro.ru https://git.postgresql.org/pg/commitdiff/3dddb2a8219d3cfd163a83561d4b4613cd2ea376使用 elog 而不是 Assert 来报告无法提供外部快照。从提交 84f5c2908 开始,执行 SQL 命令(通过 SPI 或其他方式)需要具有活动门户或调用者建立的活动快照。我们只是断言情况就是这样。但是我们现在有几个不同的报告,人们测试了不符合此要求的扩展程序,并且对由此产生的崩溃感到困惑。让我们将 Assert 转换为 test-and-elog,希望能让扩展作者更清楚这个问题。Per gripes from Liu Huailing and RekGRpth. Back-patch to v11, like the prior commit. Discussion: https://postgr.es/m/OSZPR01MB6215671E3C5956A034A080DFBEEC9@OSZPR01MB6215.jpnprd01.prod.outlook.com Discussion: https://postgr.es/m/17035-14607d308ac8643c@postgresql.org https://git.postgresql.org/pg/commitdiff/ef12f32c0870b73ab7589ffc178094ac9ba3e84fDOC:按字母顺序排列 9.7.3 中的 regexp_foo() 函数描述。由于没有明显的原因(无疑除了历史事故),regexp_replace() 出现故障。重新排序以匹配这些函数在 9.4 中列出的方式。
(这意味着 substring() 仍然是第一个,因为它是 SQL 标准的,其余的不是。)除了移动它之外,我没有触及文本。这只是为了减少即将添加的差异中的混淆。https://git.postgresql.org/pg/commitdiff/64a1f225654f8866422010ff28e0d3384ae4c3af 允许数字刻度为负数或大于精度。
以前,当指定 NUMERIC(precision, scale) 时,比例必须在 [0, precision] 范围内,这是每个 SQL 规范。此提交将允许的比例范围扩展到 [-1000, 1000],与精度无关(其有效范围仍为 [1, 1000])。负比例意味着在小数点前四舍五入。
例如,可以使用 -3 的比例声明列以将值四舍五入到最接近的千位。请注意,显示比例保持非负,因此在这种情况下,显示比例将为零,并且将显示小数点之前的所有数字。大于精度的标度支持小数点后紧跟零的小数值。趁机整理一下打包的代码,解包并验证 typmod 整数的内容,将其封装在一组新的内联函数中。由于数字列的atttypmod 的允许内容已更改,因此更改了catversion。这不是需要重新 initdb 的更改,但是 typmod 中的负比例值会混淆旧的后端。Dean Rasheed, with additional improvements by Tom Lane. Discussion: 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() 添加额外的下溢检查,以便在结果与零无法区分的情况下,它们始终返回零。在这种情况下,通过此代码的一些路径已经返回零,但其他路径则抛出溢出错误。Discussion:http://postgr.es/m/CAEZATCW6Dvq7+3wN3tt5jLj-FyOcUgT5xNoOqce5=6Su0bCR0w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4dd5ce2fd9b9b2134886fee7fe4cb36d1988adb2psql \dX:列出统计对象时检查架构。
Commit ad600bba04 添加了 psql 命令 \dX 列出扩展统计对象,但它在选择元素时没有考虑 search_path,因此某些返回的元素可能不可见。
Tab 补全已经考虑了可见性(由提交 d99d58cdc8 添加),因此将其添加到查询中非常简单。由 Justin Pryzby 报告和修复,由我进行回归测试。
Backpatch 到 PostgreSQL 14,其中引入了 \dX。
Reviewed-by: Tatsuro Yamada Discussion:https://postgr.es/m/c027a541-5856-75a5-0868-341301e1624b%40nttcom.co.jp_1 https://git.postgresql.org/pg/commitdiff/f68b609230689f9886a46e5d9ab8d6cdd947e0dc删除新添加的无用断言检查。
Coverity 抱怨我的提交 80ba4bb38353 为一致性检查添加了一个可疑的编码,即某个 tgrelid/tgparentid 组合不超过一行。但是我们不会在其他任何地方明确检查,如果我们要这样做,它应该是一个完整的不应该发生的 elog,而不仅仅是一个断言。Discussion: 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)Author: Álvaro Herrera alvherre@alvh.no-ip.org Reviewed-by: Daniel Gustafsson daniel@yesql.se Reviewed-by: Tom Lane tgl@sss.pgh.pa.us Discussion: https://postgr.es/m/202107262302.xsfdfc5sb7sh@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/93a0bf2390327a482ff37317f6e17547e735409eBuildfarm 显示,当检查点比预期更早开始时,此测试具有进一步的失败模式,因此我们检测到“检查点已完成”行,这不是我们想要的。更改配置以尝试防止这种情况发生。每个 buildfarm 在此期间,更新在提交 d18e75664a2f 中被遗忘的一条评论。Author: Kyotaro Horiguchi horikyota.ntt@gmail.com Discussion: https://postgr.es/m/20210729.162038.534808353849568395.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/ce197e91d02ca38ac1b956a3e0c11596099e7893pg_resetxlog:添加选项以设置最旧的 xid 并由 pg_upgrade 使用。
添加 pg_resetxlog -u 选项以设置 pg_control 中最旧的 xid。以前 -x 将此值设置为比 -x 值小 -20 亿。
但是,这会导致服务器立即扫描所有关系的 relfrozenxid,因此它可以将 pg_control 的最旧 xid 提前到 autovacuum_freeze_max_age 范围内,这效率低下并且可能会中断诊断恢复。
pg_upgrade 将使用此选项更好地创建新集群以匹配旧集群。
Reported-by: Jason Harvey, Floris Van Nee Discussion: https://postgr.es/m/20190615183759.GB239428@rfd.leadboat.com, 87da83168c644fd9aae38f546cc70295@opammb0562.comp.optiver.comAuthor: Bertrand Drouvot Backpatch-through: 9.6 https://git.postgresql.org/pg/commitdiff/74cf7d46a91d601e0f8d957a7edbaeeb7df83efcdoc:对于各种子字符串函数,如果只有第一个匹配,则记录。Reported-by: troy@frericks.us Discussion: https://postgr.es/m/162614304115.701.2392941350859387646@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/6feebcb6b44631c3dc435e971bd80c2dd218a5ab在pg_upgrade创建的windows脚本中禁用命令echo。 这使得它们更类似于Unix的equivalents。
Discussion:https://postgr.es/m/73deed30-3363-44e9-48a5-98aa66a8a00f@dunslane.net https://git.postgresql.org/pg/commitdiff/91d76613b7ec75b6642accaff91dc7d657e549e9将 -w 添加回 PostgresNode 中 pg_ctl (re)start 的标志。这现在是 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”保持一致。Backpatch 到第 14 版,其中引入了当前代码。 https://git.postgresql.org/pg/commitdiff/bad106752272c05de5a56036b8a84ae6ff3249a0https://git.postgresql.org/pg/commitdiff/0d1401931868e03342ed4689b5af2522eb40f750避免在错误消息中使用含糊不清的词“non-negative”。
使用“non-negative”一词的错误消息令人困惑,因为它是否接受零是模棱两可的。此提交通过用不那么模棱两可的词替换它来改进这些错误消息,例如“大于零”或“大于或等于零”。此外,此提交在错误消息样式指南中添加了有关“non-negative”一词的注释,以帮助编写新的错误消息。当 postgres_fdw 选项 fetch_size 设置为零时,之前会报告错误消息“fetch_size requires a non-negative integer value”。这个错误信息是彻头彻尾的错误。因此,对可能抛出此类错误消息的所有受支持版本进行回补。
Author: Bharath Rupireddy Reviewed-by: Kyotaro Horiguchi, Fujii Masao Discussion: 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()。
Reported-by: mengjuan.cmj@alibaba-inc.com Author: Fujii Masao Reviewed-by: Heikki Linnakangas Discussion:https://postgr.es/m/b029fce3-4fac-4265-968e-16f36ff4d075.mengjuan.cmj@alibaba-inc.com https://git.postgresql.org/pg/commitdiff/a00c138b78521b9bc68b480490a8d601ecdeb816
禁止 date_bin() 中的negative strides。尚不清楚negative strides的语义是什么,因此请抛出错误。
Per report from Bauyrzhan Sakhariyev
Reviewed-by: Tom Lane, Michael Paquier Discussion:https://www.postgresql.org/message-id/CAKpL73vZmLuFVuwF26FJ%2BNk11PVHhAnQRoREFcA03x7znRoFvA%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/3ba70d4e152372fd8ab90ed0887ee08d505ef306修复 ECPG 数字到 int 转换中的范围检查。
之前的编码防范 -INT_MAX 而不是 INT_MIN,导致 -2147483648 因超出范围而被拒绝。Per bug #17128 from Kevin SweetDiscussion:https://www.postgresql.org/message-id/flat/17128-55a8a879727a3e3a%40postgresql.org 'Reviewed-by: Tom Lane Backpatch to all supported branches https://git.postgresql.org/pg/commitdiff/5fcf3945bd90bb0170938ad780159779367dc8ac删除 pg_attribute.attcompression 的冗余设置。由于 e6241d8e0,在 initdb 期间没有属性需要 this 的非默认值,所以让默认值的常用机制来处理它。https://git.postgresql.org/pg/commitdiff/89404a01b4dadab8231dfa08cab507191c2ac929从 test/ssl .gitignore 中删除未使用的目录。
从测试运行中保存的客户端日志在 1caef31d9 中被删除,但 .gitignore 文件中的条目仍然存在。虽然这也存在于较旧的分支中,但它主要是一种外观修复,因此没有进行回补。
Reviewed-by: Michael PaquierDiscussion:https://postgr.es/m/F8E73040-BB6F-43BF-95B4-3CEC037BE856@yesql.se https://git.postgresql.org/pg/commitdiff/454ae15d10ea2d11669b69e82c98fbd03126fd69bit_count(::bytea) 示例的返回值假设了非默认值 standard_conforming_strings。这已在提交 ebedd0c78 的测试中修复。Author: wangzk.fnstxz@fujitsu.com Discussion: https://postgr.es/m/OSZPR01MB6551FFAC1088C82C3D799BE0FAEB9@OSZPR01MB6551.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/fcf4c0ae1db8594cf3d3e84d2564616497eecd5a
重构以在 proto.c 和 worker.c 中实现通用功能。
这是一个非功能性的更改,只是为了重构代码以将一些复制逻辑提取到静态函数中。这样做是为 2PC 流补丁做准备,该补丁也共享此通用逻辑。
Author: Peter Smith
Reviewed-By: Amit Kapila
Discussion: https://postgr.es/m/CAHut+PuiSA8AiLcE2N5StzSKs46SQEP_vDOUD5fX2XCVtfZ7mQ@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/91f9861242cd7dcf28fae216b1d8b47551c9159d
删除 apply_handle_commit_internal() 中未使用的参数。提交 0926e96c49 的监督。Author: Masahiko Sawada
Reviewed-By: Amit Kapila
Backpatch-through: 14, where it was introduced
Discussion: https://postgr.es/m/CAD21AoDeScrsHhLyEPYqN3sydg6PxAPVBboK=30xJfUVihNZDA@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/16bd4becee32240d09db5c6cbec87957fdfcd2d9
postgres_fdw:修复对挂起的异步请求的处理。挂起的异步请求由 process_pending_request() 处理,它以前不仅处理正在进行的远程查询,而且执行 ExecForeignScan() 以生成一个元组,以从远程查询的结果异步返回到本地服务器。但这会导致在执行查询时服务器崩溃,或者在对其进行解释分析时导致“InstrStartNode 连续调用两次”或“InstrEndLoop 在运行节点上调用”失败,如果它的计划树包含多个异步-capable 节点访问相同的 initplan/subplan,其中包含多个具有异步能力的节点,扫描与父异步能力节点相同的外部表,如 Andrey Lepikhov 报告的那样。
原因是 process_pending_request() 中的第二步在为一个具有异步能力的父节点执行 initplan/subplan 时调用,导致对另一个具有异步能力的父节点递归执行 initplan/subplan。
要解决此问题,请将 process_pending_request() 拆分为两个步骤并推迟第二个步骤,直到为每个待处理的异步请求调用 ForeignAsyncConfigureWait() 为止。
此外,在 ExecAppendAsyncEventWait() 中,我们假设 FDW 将在从该函数中的 ForeignAsyncConfigureWait() 调用时在那里创建的 WaitEventSet 中注册至少一个等待事件,但允许 FDW 在 WaitEventSet 中注册零等待事件;修改 ExecAppendAsyncEventWait() 以在这种情况下返回。
对提交 27e1f1456 的监督。回补到该提交所在的 v14。
Andrey Lepikhov and Etsuro FujitaDiscussion:https://postgr.es/m/fe5eaa19-1704-e4a4-76ee-3b9d37ade399@postgrespro.ru https://git.postgresql.org/pg/commitdiff/1ec7fca8592178281cd5cdada0f27a340fb813fcHeikki Linnakangas pushed
更新仍引用 CheckpointLock 的过时注释。
CheckpointLock 在提交 d18e75664a 中被删除,提交 ce197e91d0 更新了 CreateCheckPoint 中的剩余注释,但在 CreateRestartPoint 中仍有它的另一个副本。
https://git.postgresql.org/pg/commitdiff/df9f0c716cc75d9842b3de79159b9191c108987c
打开信号文件时不要使用 O_SYNC 或类似的东西来同步它。当我们在文件上调用 pg_fsync() 时不需要使用 get_sync_bit()。我们没有写入文件,因此在实践中没有任何区别,但这种方式似乎不那么令人惊讶。Reviewed-by: Andres FreundDiscussion:https://www.postgresql.org/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/e9f5a0681cb9cf74b4c1c98e10182ccce04aa08c删除不必要的“restoredFromArchive”全局变量。它可能对调试目的很有用,但是嗯。有 'readSource' 做几乎相同的事情。Reviewed-by: Andres FreundDiscussion:https://www.postgresql.org/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/6b16532811f07fbb58e4b1b248775acbf9f732a2提取代码以描述函数的恢复停止原因。StartupXLOG() 很长,这使它更具可读性。Reviewed-by: Andres FreundDiscussion:https://www.postgresql.org/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/4fe8dcdff3af73f6ca16eb3edfa3339c7ee0d2c4将 InRecovery 和 standbyState 全局变量移动到 xlogutils.c。它们用于在正常操作和 WAL 重放期间运行的代码,并且需要在重放期间表现不同。将它们移至 xlogutils.c,因为在那里我们有重做例程使用的其他辅助函数。Reviewed-by: Andres FreundDiscussion:https://www.postgresql.org/message-id/b3b71061-4919-e882-4857-27e370ab134a%40iki.fi https://git.postgresql.org/pg/commitdiff/317632f3073fc06047a42075eb5e28a9577a4f96删除对 ReadCheckpointRecord() 的不必要调用。最后一个检查点记录应该始终是可读的,否则,崩溃将使我们处于无法恢复的情况。因此,此补丁删除的测试应始终成功。
要使其失败,要么代码中某处存在严重错误,要么用户必须在崩溃恢复运行时手动修改 pg_wal。如果是第一个,我们应该修复这个错误。如果是第二个,他们应该停止,否则他们这样做的风险自负。在这两种情况下,完整检查点而不是恢复结束记录似乎都不是一个clear winner。此外,很少采用的代码路径特别容易受到错误的影响,所以让我们通过摆脱这个来简化。Discussion: http://postgr.es/m/CA+TgmoYmw==TOJ6EzYb_vcjyS09NkzrVKSyBKUUyo1zBEaJASA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1d919de5eb3fffa7cc9479ed6d2915fb89794459改进 START_REPLICATION ... LOGICAL 的文档。起点可能并不完全符合客户的要求;它可能位于插槽的confirmed_flush_lsn。此外,发生这种情况时,将消息从 DEBUG1 升级到 LOG。
Discussion: https://postgr.es/m/c5c861d576f2511732f8002c76245da587110b1c.camel%40j-davis.com https://git.postgresql.org/pg/commitdiff/14d474e079e1edf08926a2e68028cbd82dd614c4Bharath 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,以将 ORDER BY 添加到某些远程SQL 查询。
Peter Smith 发送了另一个补丁修订版,为逻辑复制添加行过滤。
Daniel Westermann 发送了一个补丁来修复一个错字。
Amit Langote发送了一个补丁,为 src/backend/executor/nodeModifyTable.c:ExecInsert 中的计划使用单独的 tupledesc 结构。
Dagfinn Ilmari Mannsåker 发送了一个补丁,通过在无效上下文中禁止 map 和 grep 来遵守 perlcritic。
Dipesh Pandit 发送了另一个补丁修订版,以减轻 WAL 归档程序的性能破坏目录扫描。
Bertrand Drouvot 发送了另一个补丁修订版,以便在备用服务器上进行逻辑解码。
Bharath Rupireddy 发送了另一个补丁修订版,以使用 WaitLatch for {pre, post}_auth_delay.
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 发送了补丁的另一个修订版,以在复制后的 errmsg 中发出命名空间。
Melanie Plageman 发送了一个补丁来使用 pgsr 进行 AIO bitmapheapscan。
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 发送了一个补丁,将 integerset2 实现添加到 bdbench,旨在改进惰性真空的死元组存储。
RGU 发送一个补丁来收集子问题最顶层扫描/连接相关的部分路径。
Dean Rasheed 发送了一个补丁来避免在 to_char 中被零错误的错误除法。
Prabhat Sahu 发送了一个补丁来添加一个对 prevent_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 发送了另一个补丁修订版,以提高平板分配器的性能。
David Rowley 发送了另一个补丁修订版,用于跟踪 RelOptInfo 中未修剪的分区,并允许在更多情况下进行有序分区扫描。
Vigneshwaran C 发送了另一个补丁修订版,以包含逻辑复制消息格式文档中使用的实际数据类型。

开班通知-PCP认证专家(重庆、成都站)培训开班0807
开班通知-PCP认证专家(南京站)培训开班0731
PostgreSQL认证专家考试(培训)-北京站-成功举办
如何在工业和信息化部教育与考试中心查询PostgreSQL证书