本周人物:https://postgresql.life/post/devrim_gunduz/
pgmetrics 1.11 发布,这是一个用于 PostgreSQL 指标的命令行工具。https://pgmetrics.io/
hypopg 1.2.0 发布,这是一个实现了假索引的扩展。https://github.com/HypoPG/hypopg/releases
https://archives.postgresql.org/pgsql-jobs/2021-04/
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。
Tom Lane 提交
抑制一些 Coverity 警告并改进代码一致性。Coverity 报告了类似 intresult = tm->tm_sec * 1000000 + fsec 这样的表达式中可能发生的溢出,理由是乘法会在 32 位算术中发生,然后才能扩展到 int64 结果。我认为这些都是误报,因为 tm_sec 的可能范围有限;但即使如此,当附近行具有相同的计算方式但使用 64 位常量时,这样写看起来仍然很愚蠢。……或者更准确地说,是使用 LL 常量,但这不符合项目风格。像我们其他地方一样,将所有这些都使用 INT64CONST()。这是来自 a2da77cdb 的新代码,因此无需回填。https://git.postgresql.org/pg/commitdiff/6277435a8a89c59f716c111200c072d1454b8ff2
修复了将 COLLATE 表达式的结果强制转换的旧错误。parse_coerce.c 中有一些技巧可以将请求的强制转换推送到可能出现的 CollateExpr 的下方。然而,即使请求的数据类型是不可排序的,我们也会这样做,导致生成一个无效的表达式树,其中 CollateExpr 应用于不可排序的类型。修复方法是直接删除 CollateExpr,理由是它没有用。这个错误已有十年历史,可追溯到 COLLATE 支持的最初添加。缺乏报告表明,对用户可见的影响并不多。我们注意到这个问题是因为它会在 DefineVirtualRelation 中触发断言,如果无效结构出现在视图的输出列中;然而,在非断言构建中,你不会看到崩溃,只是关于将排序应用于不可排序类型的(微妙不正确的)抱怨。我发现通过将不正确的结构进一步放入视图中,可以创建一个失败转储/重新加载的视图定义,如添加的回归测试用例所示。但 CollateExpr 在运行时不起作用,所以这可能不会导致任何真正令人兴奋的后果。根据 Yulin Pei 的报告。回填到所有支持的分支。讨论:https://postgr.es/m/HK0PR01MB22744393C474D503E16C8509F4709@HK0PR01MB2274.apcprd01.prod.exchangelabs.com https://git.postgresql.org/pg/commitdiff/c402b02b9fb53aee2a26876de90a8f95f9a9be92
删除不再相关的测试用例。collate.icu.utf8.sql 曾经测试了为枚举比较表达式记录排序依赖项,但实际上这样的表达式不应该有任何排序依赖项。在我修复了 commit c402b02b9 之后,该测试开始失败。我们不再需要测试这种情况,所以只需删除现在无用的测试步骤。(此测试用例在 HEAD 中是新添加的,因此无需回填。)讨论:https://postgr.es/m/3044030.1618261159@sss.pgh.pa.us 讨论:https://postgr.es/m/HK0PR01MB22744393C474D503E16C8509F4709@HK0PR01MB2274.apcprd01.prod.exchangelabs.com https://git.postgresql.org/pg/commitdiff/cf0020080a3de20287217621da57bfd840e9a693
避免 heap_update 中出现罕见的 PANIC。heap_update 需要清除旧元组页上(以及新页上,如果不同)任何现有的“全部可见”标志。根据编码规则,要做到这一点,它必须在不持有独占缓冲区锁的情况下锁定相应的可见性映射页;这会产生竞争条件,因为只要我们不持有缓冲区锁,其他人就可以设置该标志。代码应该通过在获取缓冲区锁后重新检查标志并重试(如果已设置)来处理。然而,heap_update 本身的一个代码路径,以及其子程序 RelationGetBufferForTuple 的一个代码路径,未能做到这一点。最终结果是,在一个并发 VACUUM 在我们临时不持有锁时设置了该标志的罕见事件中,会出现一个非周期性的“PANIC: wrong buffer passed to visibilitymap_clear”故障。自最近的 VACUUM 更改以来,这在构建农场中已出现几次,这些更改添加了可以在仅持有独占缓冲区锁的情况下设置所有可见标志的代码路径。以前,该标志(通常?)仅在执行 LockBufferForCleanup 后设置,后者会强制要求缓冲区引用计数为零,从而阻止在 heap_update 的中间设置该标志。然而,很明显,问题出在 heap_update 而不是 VACUUM。不太清楚的是,这些错误在已发布的版本中是否存在任何危险。heap_update 肯定违反了 API 预期,但如果没有代码路径可以在没有清理锁的情况下设置所有可见项,那么这只是一个潜在的错误。但这并非 100% 确定,而且我们还应该担心扩展程序或未来的回填修复可能引入此类代码路径。我选择回填到 v12。在 v12 之前修复 RelationGetBufferForTuple 需要回填一些旧修复程序(特别是 0d1fe9f74),这比修复一个假设性问题所需的代码改动要多。讨论:https://postgr.es/m/2247102.1618008027@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/34f581c39e97e2ea237255cf75cccebccc02d477
重新设计 get_cached_rowtype() 的缓存。以前,get_cached_rowtype() 缓存了一个指向 typcache 中引用计数的元组描述符的指针,依赖 ExprContextCallback 机制在销毁使用 tupdesc 的表达式树时释放 tupdesc 的引用计数。这在其设计时工作正常,但引入了块内 COMMIT 会破坏它。引用计数记录在事务生命周期的资源所有者中,但 plpgsql 在 DO 块退出之前不会销毁在 DO 块(在其第一次提交之前)中创建的简单表达式。这会导致 COMMIT 销毁原始资源所有者时出现关于泄漏的 tupdesc 引用计数的警告,然后在销毁表达式时出现关于活动资源所有者不持有匹配引用计数的错误。为了修复,通过缓存相关 typcache 条目的指针来消除对关闭回调的需求。这些条目在后端生命周期内都有效,因此我们不必担心指针过时。(对于注册的 RECORD 类型,我们仍然可以缓存指向 tupdesc 的指针,知道它在后端生命周期内不会改变。)自 commit 4b93f5799 以来,plpgsql 和 expandedrecord.c 中一直在使用此机制,并且似乎工作良好。此更改需要修改相关表达式步骤类型使用的 ExprEvalStep 结构,这对回填来说有点令人担忧。然而,扩展程序似乎没有理由熟悉这些特定子结构的细节。根据 Rohit Bhogate 的报告。回填到 v11,因为块内 COMMIT 成为了可能。讨论:https://postgr.es/m/CAAV6ZkQRCVBh8qAY+SZiHnz+U+FqAGBBDaDTjF2yiKa2nJSLKg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/c2db458c1036efae503ce5e451f8369e64c99541
修复 ALTER ROLE/DATABASE SET 的一些不恰当的禁用用法。大多数检查数据库状态的 GUC 检查钩子都有特殊的检查,可以防止它们因为有状态的问题而抛出硬错误(当 source == PGC_S_TEST 时)。这允许例如“ALTER DATABASE d SET default_text_search_config = foo”在“foo”配置尚未创建时执行。没有它,我们在转储/重新加载或 pg_upgrade 时会遇到问题,因为 pg_dump 对 GUC 值可能的依赖关系一无所知,也无法确保安全的恢复顺序。然而,check_role() 和 check_session_authorization() 没有收到这个信息,并且仍然会抛出硬错误。尚不完全清楚“ALTER ROLE x SET role = y”的用例是什么,但我们已经收到了两次关于此操作破坏升级的独立抱怨,所以显然有人这样做。因此,修复这两个函数,使它们更像其他有类似需求的检查钩子。(但我没有改变它们坚持在事务中运行的要求,因为仍然不清楚从配置文件设置这两个 GUC 是否明智。)还修复了 check_temp_buffers,它有另一种形式的疾病,即在没有 PGC_S_TEST 例外的情况下进行有状态检查。粗略调查其他 GUC 检查钩子未发现更多此类问题。(PGC_POSTMASTER 和 PGC_SIGHUP GUCs 之间存在大量相互依赖关系,这可能不是个好主意,但它们与当前问题无关,因为它们无法通过 ALTER ROLE/DATABASE 设置。)根据 Charlie Hornsby 和 Nathan Bossart 的报告。回填到所有支持的分支。讨论:https://postgr.es/m/HE1P189MB0523B31598B0C772C908088DB7709@HE1P189MB0523.EURP189.PROD.OUTLOOK.COM 讨论:https://postgr.es/m/20160711223641.1426.86096@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/69d5ca484b69771073380e234e5377b6d6a5ebaf
允许在 ON CONFLICT ... WHERE 中使用表限定的变量名。以前这里只能使用未限定的变量名。虽然这不是功能上的缺陷,因为只能引用目标表,但这与部分索引谓词的规则不一致,而该语法据说就是以其为模型。修复方法并不比传递 addToRelNameSpace = true 来 addNSItemToQuery 更难。然而,transformOnConflictArbiter 和 transformOnConflictClause 确实在管理目标表的命名空间项方面有点胡来。它们无权管理,导致命名空间项的重复创建,并且 transformOnConflictClause 甚至没有正确地做到这一点(该代码导致目标表的两个 nsitems,因为它没有清理掉现有的)。因此,让 transformInsertStmt 负责一次性设置这两个子句和 RETURNING 的目标 nsitem。此外,安排在运行 transformOnConflictArbiter 之前,将 ON CONFLICT ... UPDATE 的“excluded”伪关系添加到 rangetable 中。这会在有人在仲裁表达式中写入“excluded.col”时产生一个更有帮助的 HINT。根据 Lukas Eder 的 bug #16958。虽然我同意这是一个 bug,但后果远非严重,因此不回填。讨论:https://postgr.es/m/16958-963f638020de271c@postgresql.org https://git.postgresql.org/pg/commitdiff/6c0373ab77359c94b279c4e67c91aa623841af65
修复了过时的、引用 JoinPathExtraData.extra_lateral_rels 的注释。该字段在 commit edca44b15 中已移除,但似乎 commit 45be99f8c 重新引入了一些提及它的注释。James Coleman 指出,尽管这不完全是他提议的新措辞。也感谢 Justin Pryzby 的软件考古。讨论:https://postgr.es/m/CAAaqYe8fxZjq3na+XkNx4C78gDqykH-7dbnzygm9Qa9nuDTePg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e1623b7d86812ee6ab98a42f38b43a192c149988
稳定最近添加的 information_schema 测试查询。这些查询可能会显示意外条目,如果核心系统或并发运行的测试脚本创建了任何出现在 information_schema 视图中的函数。将它们限制为仅显示属于此测试的模式的函数,正如更早的附近测试用例那样。通过将一些内置函数转换为 SQL-function-body 样式的实验。 https://git.postgresql.org/pg/commitdiff/3157cbe974846729d49a1ee081944eee1839bdd8
撤销允许 pg_proc.prosrc 为 NULL 的决定。Commit e717a9a18 改变了 prosrc 为 NOT NULL 的长期规则,因为当一个 SQL 语言函数以 SQL 标准风格编写时,我们目前没有有用的东西可以放在那里。这似乎是个糟糕的决定,因为它很容易对外部 PL 产生负面影响(例如,使它们面临以前没有的崩溃)。SQL 函数相关的代码可以轻松地测试“is prosqlbody not null”而不是“is prosrc null”,所以这里也没有真正的收益。因此,恢复 NOT NULL 标记的移除,并调整相关逻辑。目前,我们只是将空字符串放入 SQL 标准函数的 prosrc 中。也许以后我们会有一个更好的主意,尽管像 pg_attrdef.adsrc 这样的东西的历史表明,维护字符串形式的节点树并不容易。这还向 standard_ExecutorStart 添加了一个断言,即 queryDesc->sourceText != NULL。我们已经默默地依赖它一段时间了,所以让它不那么默默。还修复了一些被忽略的文档和测试用例。讨论:https://postgr.es/m/2197698.1617984583@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/1111b2668d89bfcb6f502789158b1233ab4217a6
撤销“处理 ExecInitParallelPlan() 中的 NULL 查询字符串”。这撤销了 commit b3ee4c503872f3d0a5d6a7cbde48815f555af15b。在前面的 commit 添加了 upstream 检查,确保 querystring 不为 null 之后,我们不需要它了。讨论:https://postgr.es/m/2197698.1617984583@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/83efce7a1ebc5bae79617ddba12a64790141725c
在解析 SQL 标准函数体时提供查询源文本。没有这个,我们会丢失错误光标位置,如修改后的回归测试结果所示。讨论:https://postgr.es/m/2197698.1617984583@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/409723365b2708acd3bdf2e830257504bdefac4b
修复两个 ExplainPropertyFloat 调用中的错误单位。这只是一个潜在的错误,因为这些调用只会在非文本输出格式下达到,而目前这些格式都不会打印单位。即便如此,以防万一情况发生变化,我们也应该正确处理。Justin Pryzby 讨论:https://postgr.es/m/20210415163846.GA3315@telsasoft.com https://git.postgresql.org/pg/commitdiff/f90c708a048667befbf6bbe5f48ae9695cb89de4
修复了错误的 collation-version-recording 逻辑。recordMultipleDependencies 的“version”变量范围不正确,允许版本标签从它打算用于排序条目泄漏到后续的非排序条目。这相对难以触发,因为输入通常会按 OID 递减的顺序到达:后续的非排序项倾向于被固定。但使用自定义排序很容易显示出来。另外,不要特殊处理默认排序,而是忽略我们已找到版本的排序的固定性。这避免了创建无用的 pg_depend 条目,并消除了“C、POSIX 和 DEFAULT 是唯一固定的排序”这一不太面向未来的假设。一个小问题是,由于默认排序可能有或可能没有版本,回归测试无法假设是否会为其创建依赖项条目。这似乎还可以,因为现在它与其他排序的处理方式相同,并且我们有版本化和未版本化排序的测试用例。修复了 commit 257836a75 中的疏忽。感谢 Julien Rouhaud 的审查。讨论:https://postgr.es/m/3564817.1618420687@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ef387bed87f2787b1012e68e9a33607a1074c123
将 system_views.sql 中的函数定义拆分到新文件中。创建 system_functions.sql 文件来存放以前在 system_views.sql 中的函数定义。函数定义已经占了该文件四分之一,并且即将更多,因此将其单独存放似乎是合适的。顺便修复了 dfb75e478 中的一个疏忽:它忽略了调用 system_constraints.sql 的 check_input()。讨论:https://postgr.es/m/3956760.1618529139@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e80949372564c126c92aa7d64de483e04c0ef95e
将内置 SQL 语言函数转换为 SQL-standard-body 风格。采用新的预解析表示法来处理所有内置的和 information_schema 的 SQL 语言函数,除了少数目前无法转换的多态参数函数。这消除了这些函数在搜索路径安全方面的残留风险,并可能通过减少解析成本来提供一些小性能提升。提供更多 SQL-standard-body 功能的测试覆盖似乎也很有用。讨论:https://postgr.es/m/3956760.1618529139@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/767982e36298be4da44a063e36261e9cfdc0bf49
更新虚拟 prosrc 值。糟糕,我忘了在 767982e36 的这部分 s/system_views.sql/system_functions.sql/g。我认为不需要额外的 catversion 增加,因为这些字符串在 initdb 完成时就已经不存在了。讨论:https://postgr.es/m/3956760.1618529139@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/8a2df442b652f83b1c189822737091b90f343965
重新思考提取排序依赖项。目前,find_expr_references_walker() 关注叶节点排序字段,而忽略实际函数和运算符节点的输入排序。这在语义上似乎完全是反的,它会导致报告与表达式行为无关的排序依赖项。因此,重写为检查函数输入排序。这并不完全完美;它未能考虑 record_eq 及其同类项的行为。(之前的代码至少给出了近似值,尽管我认为它很容易被愚弄,从而考虑了不相关的复合类型的列。)我们可能以后会改进这一点,但目前这应该能让那些不喜欢 ef387bed8 的构建农场成员满意。顺便修复了 GetTypeCollations() 中的一些疏忽,并消除了重复的去重。(我担心它仍然可能是 O(N^2) 或更糟,但这使其有所改善。)讨论:https://postgr.es/m/3564817.1618420687@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/f24b156997059c257c697b825f022d115825091d
Michaël Paquier 提交
修复 interval -> char 转换中的越界内存访问。使用罗马数字(通过“RM”或“rm”)进行月份数量的转换从未考虑过负数的情况,在那里转换很容易导致越界内存访问。转换本身也不完全一致,例如指定 12 会导致 NULL,而它应该表示 XII。此提交重新设计了转换计算,以获得更一致的行为:- 如果月份和年份的数量为 0,则返回 NULL。- 如果月份的数量为正,则返回确切的月份编号。- 如果月份的数量为负,则执行向后计算,-1 表示十二月,-2 表示十一月,依此类推。报告者:Theodor Arsenij Larionov-Trichkin 作者:Julien Rouhaud 讨论:https://postgr.es/m/16953-f255a18f8c51f1d5@postgresql.org 回填至:9.6 https://git.postgresql.org/pg/commitdiff/7a3972597f6ed7a6976d81abb66c38a7a1c29058
将 log_autovacuum_min_duration 移入其正确的章节。此 GUC 已被归类为 LOGGING_WHAT,但其在 postgresql.conf.sample 和文档中的位置并未反映这一点,因此修复了这些不一致之处。作者:Justin Pryzby 讨论:https://postgr.es/m/20210404012546.GK6592@telsasoft.com https://git.postgresql.org/pg/commitdiff/b094063cd16d22b2f065a432580bb3568b2d8a77
删除 test_pg_dump 新测试中的重复 --no-sync 开关。这些开关在 6568cef 中引入。报告者:Noah Misch 讨论:https://postgr.es/m/20210404220802.GA728316@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/885a87641930778d9580fdf0656af24e3f52d276
简化 postgres_fdw 连接终止测试。在 32a9c0b 中引入的用于中断和重新建立连接的测试依赖于 pg_terminate_backend() 来实现其逻辑。当这些测试被引入时,此函数仅向后端发送信号而不等待操作完成,并且测试反复检查 pg_stat_activity 以查看操作是否已完成。自 aaf0432 以来,可以定义一个超时时间,使 pg_terminate_backend() 等待一定时间,因此我们利用这一点,设置一个足够长(3 分钟)的超时时间,即使在慢速机器上也能为测试通过提供足够的空间。一些测量表明,此更改后,postgres_fdw 的测试速度要快得多。例如,在我的笔记本电脑上,它们现在需要 4 秒而不是 6 秒。作者:Bharath Rupireddy 讨论:https://postgr.es/m/CALj2ACXGY_EfGrMTjKjHy2zi-u1u9rdeioU_fro0T6Jo8t56KQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/93f41461449f917da20af4fa2973f8afe8e6ea6e
doc:将 force_parallel_mode 移至开发者选项部分。此 GUC 自引入(commit 7c944bd)以来一直被归类为规划器选项,并列在 postgresql.conf.sample 中。由于此参数用于测试目的,因此将其移至专用于开发者参数的部分,从而将其从 postgresql.conf.sample 中删除。这将避免生产服务器上的用户随意使用它,因为他们通常不需要触及此参数。开发者选项的通用描述被稍微改写,以纳入 force_parallel_mode,根据 Tom Lane 的建议。根据 Tom Lane、Bruce Momjian、Justin Pryzby、Bharath Rupireddy 和我的讨论。作者:Justin Pryzby, Tom Lane 讨论:https://postgr.es/m/20210403152402.GA8049@momjian.us https://git.postgresql.org/pg/commitdiff/ac725ee0f98c3fec703ffd9b070da629608e9a1e
调整 pg_dump --extension 对配置表行为的处理。6568cef 引入的该选项在处理 pg_extension_config_dump 设置的配置表时存在不一致行为,因为即使对于未列在 --extension 开关集中的扩展,所有配置表的数据也会包含在转储中。当扩展未被列出时,转储的内容会根据扩展安装的模式而变化。例如,安装在 public 模式下的扩展,即使未列出 --extension,其配置数据也会被转储,这与安装在非 public 模式下的扩展情况不一致。根据与 Noah 的讨论,我们达成了一个简单的规则:如果一个扩展列在 --extension 中,则转储其配置数据(默认不变且向后兼容,即立即转储所有内容,如果没有直接列出的扩展)。这避免了转储依赖于其中一个 --schema 的一些奇怪情况。添加了更多测试来覆盖差距,我们在其中交叉检查了扩展未列出时依赖于 --schema 的更多行为。报告者:Noah Misch 审阅者:Noah Misch 讨论:https://postgr.es/m/20210404220802.GA728316@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/344487e2db03f3cec13685a839dbc8a0e2a36750
doc:简化 psql 的 HISTFILE 示例。e4c7619 在 psql 文档的 HISTFILE 示例中,在变量 DBNAME 前面添加了一个空格,作为一种变通方法,因为当时变量的解析方式不同。这种行为在 9.2 中已改变,导致 psql 文档中的示例在有或没有 DBNAME 变量前空格的情况下创建相同的历史文件。让我们移除示例中的这个空格,以减少任何混淆,因为它旨在证明每个数据库的历史文件很容易设置,并且这样更易于阅读。根据与 Tom Lane 的讨论。报告者:Ludovic Kuty 讨论:https://postgr.es/m/161830067409.691.16198363670687811485@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/1840d9f4c89998872a3b46473f8e9e5b6ff3c144
doc:修复 SQL/JSON 示例查询中的拼写错误。作者:Erik Rijkers 讨论:https://postgr.es/m/1219476687.20432.1617452918468@webmailclassic.xs4all.nl 回填至:12 https://git.postgresql.org/pg/commitdiff/254a2164e5b216ecf98882f8bcb9e239ab2d432d
Amit Kapila 提交
doc:更新逻辑复制新消息的信息。更新了关于流式传输进行中事务的新消息的文档,以及对现有消息所做的更改。它还更新了逻辑复制支持的协议版本信息。作者:Ajin Cherian 审阅者:Amit Kapila, Peter Smith, Euler Taveira 讨论:https://postgr.es/m/CAFPTHDYHN9m=MZZct-B=BYg_TETvv+kXvL9RD2DpaBS5pGxGYg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/15c1a9d9cb7604472d4823f48b64cdc02c441194
在 stats 中为 slotname 使用 NameData 数据类型。这将使其与其他 slotname 的用法保持一致。顺便将 pgstat_report_replslot 签名更改为使用结构而不是多个参数。报告者:Andres Freund 作者:Vignesh C 审阅者:Sawada Masahiko, Amit Kapila 讨论:https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/cca57c1d9bf7eeba5b81115e0b82651cf3d8e4ea
向复制槽统计信息添加已处理总数据的信息。这添加了关于总事务计数和从 ReorderBuffer 逻辑发送到解码输出插件的总事务数据统计信息。用户可以查询 pg_stat_replication_slots 视图来查看这些统计信息。建议者:Andres Freund 作者:Vignesh C 和 Amit Kapila 审阅者:Sawada Masahiko, Amit Kapila 讨论:https://postgr.es/m/20210319185247.ldebgpdaxsowiflw@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/f5fc2f5b23d1b1dff60f8ca5dc211161df47eda4
Fujii Masao 提交
支持 TRUNCATE 对外表进行选项卡完成。Commit 8ff1c94649 扩展了 TRUNCATE 命令,使其也能截断外表。但它忘记支持 TRUNCATE 对外表的选项卡完成。也就是说,以前 TRUNCATE 的选项卡完成只显示常规表的名称。此提交改进了 TRUNCATE 的选项卡完成,使其也显示外表的名称。作者:Fujii Masao 审阅者:Bharath Rupireddy 讨论:https://postgr.es/m/551ed8c1-f531-818b-664a-2cecdab99cd8@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/81e094bdfdd6cf6568cba2b25eea9876daceaacb
doc:修复 logicaldecoding.sgml 中的拼写错误。由 commit 0aa8a01d04 引入。作者:Peter Smith 讨论:https://postgr.es/m/CAHut+Ps8rkVHKWyjg09Fb1PaVG5-EhoFTFJ9OZMF4HPzDSXfew@mail.gmail.com https://git.postgresql.org/pg/commitdiff/5fe83adad9efd5e3929f0465b44e786dc23c7b55
doc:在 CREATE TABLE 摘要中添加缺少的 COMPRESSION。Commit bbe0a81db6 引入了 CREATE TABLE 命令中的“INCLUDING COMPRESSION”选项,但忘记在 CREATE TABLE 语法摘要中提及它。作者:Fujii Masao 审阅者:Michael Paquier 讨论:https://postgr.es/m/54d30e66-dbd6-5485-aaf6-a291ed55919d@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/e2e2efca85b4857361780ed0c736c2a44edb458a
Peter Eisentraut 提交
修复 nls.mk 中的文件引用。被 37d2ff38031262a1778bc76a9c55fff7afbcf275 破坏。https://git.postgresql.org/pg/commitdiff/44c8a3d75997b08fa7645dac7ee5c7a918a235c7
pg_amcheck:添加基本 NLS 支持。https://git.postgresql.org/pg/commitdiff/fc0fefbfe0d7e805f6a3a4aaaad7127090fcca51
pg_upgrade:使用 %u 而不是 %d 打印 OID。如果数据库 OID 超过有符号 32 位范围,这可能会将错误输出写入集群删除脚本。https://git.postgresql.org/pg/commitdiff/6787e53fe59eed19095c771a8d3323fb59420733
改进某些错误消息中的引用。https://git.postgresql.org/pg/commitdiff/07e5e66742333ab100a557e6e3f710e92fa1fd92
amcheck:为 TOAST 块编号使用正确的格式占位符。其中一些已经在 9acaf1a62197205b06a85afbfcaa7ffaac939ef3 中修复,但还有一个仍然不一致。https://git.postgresql.org/pg/commitdiff/59da8d9eb7255c3cb1c9f3b79d76b18b6a1c7da2
pg_upgrade:对帮助输出的可翻译性进行小幅改进。https://git.postgresql.org/pg/commitdiff/cbae8774eb5c2f5552323ee18ca5286f9c8e5d06
撤销“psql:默认显示所有查询结果”。此提交撤销了 commit 3a5130672296ed4e682403a77a9a3ad3d21cef75。根据讨论,此补丁在开发周期的这一点上存在太多问题无法解决。我们将在未来再次尝试。讨论:https://postgresql.ac.cn/message-id/flat/alpine.DEB.2.21.1904132231510.8961@lancre https://git.postgresql.org/pg/commitdiff/fae65629cec824738ee11bf60f757239906d64fa
psql:对更好的可翻译性进行小幅修复。https://git.postgresql.org/pg/commitdiff/25593d7d338232fb855ba563b325237de8f14091
psql:在 CREATE FUNCTION 语句中精炼 BEGIN...END 块的词法分析。仅当 BEGIN...END 块在 CREATE [OR REPLACE] {FUNCTION|PROCEDURE} 语句中时才进行跟踪。如果在括号中则忽略。审阅者:Laurenz Albe laurenz.albe@cybertec.at 讨论:https://postgresql.ac.cn/message-id/cee01d26fe55bc086b3bcf10bfe4e8d450e2f608.camel@cybertec.at https://git.postgresql.org/pg/commitdiff/029c5ac03db72f1898ee17e417650a2e0764b239
为块编号使用正确的格式占位符。应该是 %u 而不是 %d。https://git.postgresql.org/pg/commitdiff/f59b58e2a1b7e4a48dee36cc61966759da0faedd
doc:修复 DocBook 原始元素周围的间距。https://git.postgresql.org/pg/commitdiff/f7c09706c14d0858d5a186f3cc769471cba41578
将缺少的源文件添加到 nls.mk。https://git.postgresql.org/pg/commitdiff/4ed7f0599a8984d9ed967780a157d9b23d03fbb5
Thomas Munro 推送
修复 heap_update() 中潜在的 SSI 危险。Commit 6f38d4dac38 未能遵从关于“otid”所指向值稳定性的警告。允许调用者传递 newtup->t_self 的指针,该指针将在函数执行期间更新。相反,SSI 检查应使用我们在函数顶部附近复制到 oldtup.t_self 的值。这不是一个活跃的 bug,因为 newtup->t_self 实际上直到稍后才会被更新,但它很令人困惑,并且违反了注释建立的规则。回填到 13。报告者:Tom Lane tgl@sss.pgh.pa.us 讨论:https://postgr.es/m/2689164.1618160085%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/b1df6b696b759f00ebbf02e6de64e259d4be5785
Doc:记录 Windows 排序版本已知问题。警告用户,具有传统 Windows NLS 名称(如“English_United States.1252”)的区域设置将不提供版本信息,并且需要类似 initdb --lc-collate=en-US 的操作才能为初始模板数据库解决此问题。讨论:https://postgr.es/m/CA%2BhUKGJ_hk3rU%3D%3Dg2FpAMChb_4i%2BTJacpjjqFsinY-tRM3FBmA%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/1bf946bd43e545b86e567588b791311fe4e36a8c
Noah Misch 推送
将 regress-python3-mangle.mk 移植到 Solaris "sed"。它不支持 "\(foo\)*",而 POSIX "sed" 实现则支持;请参阅 Autoconf 手册。回填到 9.6(所有支持的版本)。https://git.postgresql.org/pg/commitdiff/c3556f6fac349b31da2fd00107469ce36fb37536
在包含 Bison 解析器的目录中使用“-I.”,适用于 Oracle 编译器。使用 Oracle Developer Studio 12.6 编译器时,#line 指令会改变当前源文件的位置,以便进行 #include "..." 指令。因此,VPATH 构建因“cannot find include file: "specscanner.c"”而失败。除了两个例外,包含解析器的目录已添加“-I. -I$(srcdir)”;消除这些例外。回填到 9.6(所有支持的版本)。https://git.postgresql.org/pg/commitdiff/455dbc010be53ac61fcb2da83b1e565f4c263449
Robert Haas 提交
docs:为可配置压缩更新 TOAST 存储文档。提及存在多种 TOAST 压缩方法,并且使用的压缩方法与之前存储在那里(TOAST 指针)的其他信息一起存储。添加了对 default_toast_compression 文档的引用,其中列出了支持的方法,而不是在此处重复。我没有试图保留声称 pglz“相当简单且非常快”的文本。我对前半句的真实性没有看法,但 LZ4 似乎更快(并且压缩效果更好),因此最好不要通过谈论 PGLZ 的压缩速度作为其主要优点来混淆视听。补丁由我提供,Justin Pryzby 审阅。讨论:http://postgr.es/m/CA+Tgmoaw_YBwQhOS_hhEPPwFhfAnu+VCLs18EfGr9gQw1z4H-w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e8c435a824e123f43067ce6f69d66f14cfb8815e
amcheck:改写部分消息并修复对齐问题。我们不需要在这些消息中提及属性编号,因为有一个专门的列用于此,但我们应该提及 TOAST 值 ID,因为它对于用户想要进行的任何后续故障排除都非常有用。这还改写了一些消息,希望能更好地阅读。此外,在某些平台上,如果 TOAST 指针未对齐,则使用 VARATT_EXTERNAL_GET_POINTER 来访问它,以防因对齐问题导致崩溃,从而不会在检查用户数据损坏时崩溃。Mark Dilger,我审阅。讨论:http://postgr.es/m/7D3B9BF6-50D0-4C30-8506-1C1851C7F96F@enterprisedb.com https://git.postgresql.org/pg/commitdiff/9acaf1a62197205b06a85afbfcaa7ffaac939ef3
Peter Geoghegan 提交
Tomáš Vondra 提交了
Andrew Dunstan 推送
Andy Fan 发送了一个补丁,用于记录 RelOptInfo.partexprs 和 nullable_partexprs 的增强功能,并将 gen_prune_steps_from_exprs 分割成更小的块。
Luc Vlaming 发送了另一个补丁修订版,用于添加显式的部分 UNION ALL 路径,并改进并行子查询行计数和成本计算。
Luc Vlaming 发送了另一个补丁修订版,用于通过不发出 LLVMPassManagerBuilderUseInlinerWithThreshold 传递来提高 JIT 性能,并在首次调用时惰性生成 IR 代码。
Amul Sul 发送了另一个补丁修订版,用于实现 ALTER SYSTEM ... READ {ONLY | WRITE}。
James Coleman 发送了一个补丁,为 HashedScalarArrayOp 添加了对 NOT IN 的支持。
Amit Langote 发送了一个补丁,用于修复 PartitionDesc includes_detached 中的一个思绪错误。
Masahiko Sawada 发送了一个补丁,用于修复 REFRESH MATERIALIZED VIEW 的性能退化。
Peter Smith 发送了另一个补丁修订版,为内置逻辑复制添加了对预备事务的支持,并为流式事务添加了 prepare API 支持。
Vigneshwaran C 和交易补丁,用于在 CREATE/ALTER SUBSCRIPTION 中识别发布者丢失的发布。
Vigneshwaran C 发送了一个补丁,用于修复监控统计信息文档的不一致性。
Bruce Momjian 发送了两个补丁修订版,用于修复 pg_stat_activity 中最近添加的查询 ID 的一些命名问题。
Mark Dilger 发送了另外两个补丁修订版,用于向 pg_amcheck 应用程序添加 TOAST 指针损坏检查。
Melanie Plageman 发送了一个补丁,添加了一个系统视图 pg_stat_buffers_written,该视图顾名思义。
Fujii Masao、Kyotaro HORIGUCHI 和 Justin Pryzby 交易补丁,用于修复 TRUNCATE 在外表功能中的一些不当之处。
Justin Pryzby 发送了另外两个补丁修订版,用于完善 14 的文档。
Amit Langote 发送了一个补丁,用于按需初始化 WITH CHECK OPTIONS 和 RETURNING 表达式。
Ekaterina Sokolova 发送了另一个补丁修订版,为 Nested Loop 添加了额外的 Explain 统计信息。
Haiying Tang 发送了另一个补丁修订版,用于支持 psql 中对大写字母输入的查询结果进行选项卡完成。
Dave Page 发送了一个补丁,用于修复 sepgsql 中的一个日志记录问题。
Andrei Zubkov 发送了另一个补丁修订版,用于跟踪 pg_stat_statements 中的语句条目时间戳。
David Christensen 发送了一个补丁,将 pg_size_pretty(numeric) 知道的单位扩展到包括泽字节(yottabytes)。
Bharath Rupireddy 发送了另外两个补丁修订版,以避免在 slot_store_error_callback 和 conversion_error_callback 中访问系统目录。
Masahiko Sawada 和 Peter Geoghegan 交易补丁,以确保 VACUUM 计费的代码注释解释 LP_DEAD 计费。
Ajin Cherian 发送了另外两个补丁修订版,用于跳过逻辑复制中的空事务。
Julien Rouhaud 发送了一个补丁,用于处理与查询 ID 相关的日志记录的一些角落情况。问题在于,一些在语法上有效的查询可能会被记录下来,而忽略了对它们引用的对象在目录中是否存在检查。修复方法是为 log_line_prefix 添加一个 %Q 选项,该选项检查对象是否实际找到。
Zeng Wenjing 和 Shawn Wang 交易补丁,用于实现全局临时表。
Tom Lane 发送了一个补丁,用范围检查替换 pg_depend PIN 条目。
Amul Sul 发送了一个补丁,从 transformCreateStmt 中删除了一个冗余变量。
Pavel Stěhule 发送了两个额外版本的补丁,用于实现模式变量。
Matthias van de Meent 发送了两个补丁修订版,用于记录 ATTACH PARTITION 对默认分区的锁定行为。
Matthias van de Meent 发送了一个补丁,用于实现 _bt_binsrch* 的页级动态前缀截断,然后使用相同的方法实现和使用索引元组属性迭代。
James Coleman、Tomáš Vondra 和 Tom Lane 交易补丁,旨在修复 TPC-DS 查询 94-96 中出现的“无法找到用于排序的 pathkey 项”的 bug。
Masahiro Ikeda 发送了另一个补丁修订版,用于改进 WAL 统计信息报告的性能。
Tomáš Vondra 发送了一个补丁,用于在 generate_orderedappend_path 中生成分数最便宜的路径。
Osumi Takamichi 和 Li Japin 交易补丁,用于修复 TRUNCATE 和同步逻辑复制之间的一个不匹配。
Michaël Paquier 发送了另一个补丁修订版,用于修复逻辑复制工作程序中的 relcache 泄漏。
Mark Dilger 发送了两个补丁修订版,为 pg_amcheck 添加了 --install-missing 选项。
Sven Klemm 发送了一个补丁,用于修复 pg_event_trigger_ddl_commands,在同一事务中删除对象的情况下,它可能会查看无效的缓存。
Andy Fan 发送了一个补丁,用于确保 set_append_rel_size 考虑初始分区裁剪。
Tom Lane 发送了一个补丁,用于在重复子查询提取中节省一些周期。