本周人物: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/
PostgreSQL 星球:https://planet.postgresql.org/
本周 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间 (PST8PDT) 周日下午 3:00 前将新闻和公告提交至 david@fetter.org。
Tom Lane 推送
消除一些 Coverity 警告并提高代码一致性。Coverity 抱怨诸如 intresult = tm->tm_sec * 1000000 + fsec
之类的表达式中可能存在溢出;理由是乘法运算会在扩展到 int64 结果之前以 32 位算术进行。我认为这些都是误报,因为 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 正在练习记录枚举比较表达式的排序规则依赖性,但是这样的表达式从一开始就不应该有任何排序规则依赖性。在我修复 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: 传递给 visibilitymap_clear 的缓冲区错误”失败。自从最近的 VACUUM 更改添加了可以在仅持有独占缓冲区锁的情况下设置全部可见标志的代码路径以来,这在构建农场中已经见过几次。以前,该标志(通常?)仅在执行 LockBufferForCleanup 后设置,这将坚持缓冲区引脚计数为零,从而防止在 heap_update 中途设置该标志。但是,很明显,这是 heap_update 而不是 VACUUM 的错误。不太清楚的是,这些错误是否对发布的分支构成任何风险。heap_update 当然违反了 API 期望,但是如果没有代码路径可以在没有清理锁的情况下设置全部可见,那么这只是一个潜在的错误。但这并不是 100% 确定,此外,我们应该担心可能会引入此类代码路径的扩展或未来的反向移植修复。我选择反向移植到 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() 缓存了一个指向类型缓存中引用计数元组描述符的指针,依赖 ExprContextCallback 机制在销毁使用 tupdesc 的表达式树时释放 tupdesc 引用计数。当它被设计时,这工作得很好,但是引入 DO 块内的 COMMIT 打破了它。引用计数记录在事务生命周期的资源所有者中,但是 plpgsql 不会在退出 DO 块之前(在第一次提交之前)销毁 DO 块内创建的简单表达式。这会导致在 COMMIT 销毁原始资源所有者时发出有关泄露的 tupdesc 引用计数的警告,然后在销毁表达式时发出关于活动资源所有者不持有匹配引用计数的错误。为了解决这个问题,通过缓存一个指向相关类型缓存条目的指针,从而完全无需关闭回调。这些在后端生命周期内存在,因此我们不必担心指针会过期。(对于注册的 RECORD 类型,我们仍然可以缓存一个指向 tupdesc 的指针,因为我们知道它在后端生命周期内不会更改。)自提交 4b93f5799 以来,此机制已在 plpgsql 和 expandedrecord.c 中使用,并且似乎工作良好。此更改需要修改相关表达式步骤类型使用的 ExprEvalStep 结构,这对于反向移植有点令人担忧。但是,似乎没有充分的理由让扩展熟悉这些特定子结构的详细信息。根据 Rohit Bhogate 的报告。反向移植到 v11,其中在 DO 块内的 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 时为依赖于状态的问题引发硬错误。例如,当尚未创建“foo”配置时,这允许“ALTER DATABASE d SET default_text_search_config = 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 GUC 之间存在许多相互依赖关系,这可能是一个坏主意,但它们与当前关注的问题无关,因为它们无法通过 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` 甚至没有完全正确地执行此操作(因为没有清除现有的,该代码导致了目标表的两个命名空间项)。因此,让 `transformInsertStmt` 负责为这两个子句和 RETURNING 设置目标命名空间项一次。此外,安排在运行 `transformOnConflictArbiter` 之前,将 ON CONFLICT ... UPDATE 的“excluded”伪关系添加到范围表。如果有人在仲裁表达式中写入“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 的注释。该字段在提交 edca44b15 中被删除,但提交 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 函数体风格的实验得出。 https://git.postgresql.org/pg/commitdiff/3157cbe974846729d49a1ee081944eee1839bdd8
撤销允许 pg_proc.prosrc 为 NULL 的决定。提交 e717a9a18 更改了长期以来的规则,即 prosrc 不为 NULL,因为当 SQL 语言函数以 SQL 标准风格编写时,我们目前没有任何有用的东西放在那里。但这似乎是一个糟糕的决定,因为它很容易对外部 PL 产生负面影响(例如,使它们容易发生以前不会发生的崩溃)。与测试“prosrc 是否为 null”一样,SQL 函数相关代码可以轻松测试“prosqlbody 是否不为 null”,因此也没有真正的收获。因此,恢复删除 NOT NULL 标记并调整相关逻辑。目前,我们只是为 SQL 标准函数在 prosrc 中放入一个空字符串。也许我们以后会有更好的想法,尽管像 pg_attrdef.adsrc 这样的东西的历史表明,维护节点树的字符串等效物并不容易。这还添加了一个断言,即 queryDesc->sourceText != NULL 到 standard_ExecutorStart。我们已经默默地依赖这一点一段时间了,所以让它不那么沉默。还要修复一些被忽略的文档和测试用例。讨论:https://postgr.es/m/2197698.1617984583@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/1111b2668d89bfcb6f502789158b1233ab4217a6
恢复“在 ExecInitParallelPlan() 中处理 NULL 查询字符串。”。这将恢复提交 b3ee4c503872f3d0a5d6a7cbde48815f555af15b。在前面的提交添加了查询字符串不为 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 调用中的错误单位。这只是一个潜在的 bug,因为这些调用仅针对非文本输出格式到达,并且目前这些格式都不会打印单位。尽管如此,我们应该在这种情况发生时使其正确。Justin Pryzby 讨论:https://postgr.es/m/20210415163846.GA3315@telsasoft.com https://git.postgresql.org/pg/commitdiff/f90c708a048667befbf6bbe5f48ae9695cb89de4
修复错误的排序规则版本记录逻辑。`recordMultipleDependencies` 的“version”变量的作用域错误,允许版本标签从其应有的排序规则条目泄漏到后续的非排序规则条目。由于输入通常会以 OID 降序排列,这相对难以触发:后续的非排序规则项往往会被固定。但是,使用自定义排序规则可以很容易地展示这一点。此外,不要特殊处理默认排序规则,而是在我们找到排序规则的版本时忽略排序规则的固定状态。这避免了创建无用的 pg_depend 条目,并消除了一个不太面向未来的假设,即 C、POSIX 和 DEFAULT 是唯一固定的排序规则。一个小问题是,由于默认排序规则可能具有或不具有版本,因此回归测试无法假设是否会为其创建依赖项条目。但这似乎没问题,因为它现在与其他排序规则的处理方式相同,并且我们有针对版本化和未版本化排序规则的测试用例。修复了提交 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 标准体样式。为所有内置和 information_schema SQL 语言函数采用新的预解析表示形式,除了少数因具有多态参数而目前无法转换的函数。这消除了这些函数周围的搜索路径安全性的残留风险,并且可能通过降低解析成本提供一些小的性能优势。为 SQL 标准体功能提供更多的测试覆盖率似乎也很有用。讨论:https://postgr.es/m/3956760.1618529139@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/767982e36298be4da44a063e36261e9cfdc0bf49
更新虚拟 prosrc 值。哎呀,忘记在 767982e36 的这部分中将 system_views.sql/g 替换为 system_functions.sql 了。我认为,由于这些字符串在 initdb 完成时已经消失了,因此无需额外的 catversion 提升。讨论: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
文档:将 force_parallel_mode 移至开发人员选项部分。此 GUC 自从在 7c944bd 中引入以来一直被归类为规划器选项,并在 postgresql.conf.sample 中列出。由于此参数用于测试目的,因此将其移至开发人员参数的专用部分,并将其从 postgresql.conf.sample 中删除。这将避免用户在生产服务器上尝试使用它,因为他们永远不应该真正接触此参数。根据 Tom Lane 的建议,对开发人员选项使用的一般描述进行了一些修改,以考虑包含 force_parallel_mode。根据 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
文档:简化 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
文档:修复 SQL/JSON 示例查询中的拼写错误。作者:Erik Rijkers。讨论:https://postgr.es/m/1219476687.20432.1617452918468@webmailclassic.xs4all.nl 向后移植到 12: https://git.postgresql.org/pg/commitdiff/254a2164e5b216ecf98882f8bcb9e239ab2d432d
Amit Kapila 推送了代码。
文档:更新逻辑复制的新消息信息。更新了关于正在进行的事务流的新增消息以及现有消息更改的文档。它还更新了逻辑复制支持的协议版本信息。作者: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
在统计信息中使用 NameData 数据类型表示槽名。这将使其与代码中其他地方的槽名使用方式保持一致。顺便一提,将 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 命令的 Tab 键补全功能。提交 8ff1c94649 扩展了 TRUNCATE 命令,使其也可以截断外表。但是它忘记了支持外表的 TRUNCATE 命令的 Tab 键补全功能。也就是说,以前 TRUNCATE 的 Tab 键补全只显示常规表的名称。此提交改进了 TRUNCATE 的 Tab 键补全功能,使其也显示外表的名称。作者:Fujii Masao。审核人:Bharath Rupireddy。讨论:https://postgr.es/m/551ed8c1-f531-818b-664a-2cecdab99cd8@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/81e094bdfdd6cf6568cba2b25eea9876daceaacb
文档:修复 logicaldecoding.sgml 中的拼写错误。在提交 0aa8a01d04 中引入。作者:Peter Smith。讨论:https://postgr.es/m/CAHut+Ps8rkVHKWyjg09Fb1PaVG5-EhoFTFJ9OZMF4HPzDSXfew@mail.gmail.com https://git.postgresql.org/pg/commitdiff/5fe83adad9efd5e3929f0465b44e786dc23c7b55
文档:在 CREATE TABLE 概要中添加缺失的 COMPRESSION。提交 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:默认显示所有查询结果"。这还原了提交 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
文档:修复 DocBook 逐字元素周围的间距。https://git.postgresql.org/pg/commitdiff/f7c09706c14d0858d5a186f3cc769471cba41578
将缺失的源文件添加到 nls.mk 中。https://git.postgresql.org/pg/commitdiff/4ed7f0599a8984d9ed967780a157d9b23d03fbb5
Thomas Munro 推送了代码。
修复 heap_update() 中潜在的 SSI 危害。提交 6f38d4dac38 未注意到关于 "otid" 所指向的值的稳定性的警告。允许调用者传入指向 newtup->t_self 的指针,该指针将在函数执行期间更新。相反,SSI 检查应使用我们在函数顶部附近复制到 oldtup.t_self 中的值。这不是一个实际的错误,因为 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
文档:记录 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"。它不支持像 POSIX "sed" 实现那样的 "\(foo\)*"
;请参阅 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 推送了代码。
文档:更新 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,因为这对于用户希望进行的任何后续故障排除非常有用。这也重新措辞了一些消息,希望阅读起来更好一些。此外,使用 VARATT_EXTERNAL_GET_POINTER,以防我们访问的 TOAST 指针在对对齐挑剔的平台上没有对齐,这样我们就不会在检查用户数据的损坏情况时崩溃。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 pass,并在首次调用时惰性地生成 IR 代码,来提高 JIT 性能。
Amul Sul 提交了另一个补丁版本,以实现 ALTER SYSTEM ... READ {ONLY | WRITE}。
James Coleman 提交了一个补丁,以添加对 NOT IN 的 HashedScalarArrayOp 支持。
Amit Langote 提交了一个补丁,以修复 PartitionDesc includes_detached 中的一个错误。
Masahiko Sawada 提交了一个补丁,以修复 REFRESH MATERIALIZED VIEW 的性能下降问题。
Peter Smith 提交了另一个补丁版本,以向内置逻辑复制添加对准备事务的支持,并为流式事务添加 prepare API 支持。
Vigneshwaran C 和 traded 补丁,以识别 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 提交了另一个补丁版本,以添加额外的统计信息来解释嵌套循环。
Haiying Tang 提交了另一个补丁版本,以支持在 psql 中使用查询结果进行大写字符输入的制表符补全。
Dave Page 提交了一个补丁,以修复 sepgsql 中的日志记录问题。
Andrei Zubkov 提交了另一个补丁版本,以在 pg_stat_statements 中跟踪语句的进入时间戳。
David Christensen 提交了一个补丁,以扩展 pg_size_pretty(numeric) 知道的单位,以包括高达尧字节的单位。
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 中表现为“找不到排序的路径键项”的错误。
Masahiro Ikeda 提交了另一个补丁版本,以提高报告 WAL 统计信息的性能。
Tomáš Vondra 提交了一个补丁,以在 generate_orderedappend_path 中生成部分最便宜路径。
Takamichi Osumi 和 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 提交了一个补丁,以在重复的子查询上拉中节省一些周期。