pg_probackup 2.4.9 发布,这是一个用于管理 PostgreSQL 数据库集群备份和恢复的实用工具。https://github.com/postgrespro/pg_probackup/releases/tag/2.4.9
pitrery 3.3 发布,这是一组用于管理 PostgreSQL 的 PITR 备份的 Bash 脚本。http://dalibo.github.io/pitrery/
本周人物:https://postgresql.life/post/alexander_sosna/
https://archives.postgresql.org/pgsql-jobs/2021-02/
Planet PostgreSQL: https://planet.postgresql.org/
本周的 PostgreSQL 周刊由 David Fetter 带给您
请在太平洋标准时间/太平洋夏令时间周日下午 3:00 前将新闻和公告发送至 david@fetter.org。
Alexander Korotkov 推送了
jsonb 的下标实现。jsonb 的下标不支持切片,对下标的数量没有限制,并且赋值操作期望替换值具有 jsonb 类型。通过下标赋值和通过 jsonb_set() 赋值之间还有一个功能上的差异。当原始 jsonb 容器为 NULL 时,下标会将其替换为空的 jsonb 并继续赋值操作。为了代码重用,我们重新排列了 jsonb 的一些功能,允许 jsonb_set 和下标赋值操作使用相同的函数。最初的想法来自 Oleg Bartunov。Catversion 已更新。讨论:https://postgr.es/m/CA%2Bq6zcV8qvGcDXurwwgUbwACV86Th7G80pnubg42e-p9gsSf%3Dg%40mail.gmail.com 讨论:https://postgr.es/m/CA%2Bq6zcX3mdxGCgdThzuySwH-ApyHHM-G4oB1R0fn0j2hZqqkLQ%40mail.gmail.com 讨论:https://postgr.es/m/CA%2Bq6zcVDuGBv%3DM0FqBYX8DPebS3F_0KQ6OVFobGJPM507_SZ_w%40mail.gmail.com 讨论:https://postgr.es/m/CA%2Bq6zcVovR%2BXY4mfk-7oNk-rF91gH0PebnNfuUjuuDsyHjOcVA%40mail.gmail.com 作者:Dmitry Dolgov 审核人:Tom Lane、Arthur Zakirov、Pavel Stehule、Dian M Fay 审核人:Andrew Dunstan、Chapman Flack、Merlin Moncure、Peter Geoghegan 审核人:Alvaro Herrera、Jim Nasby、Josh Berkus、Victor Wagner 审核人:Aleksander Alekseev、Robert Haas、Oleg Bartunov https://git.postgresql.org/pg/commitdiff/676887a3b0b8e3c0348ac3f82ab0d16e9a24bd43
在 jsonb 下标期间填充数组间隙。此提交为 jsonb 赋值引入了两个新标志:* JB_PATH_FILL_GAPS:在指定位置追加数组元素,间隙用 null 填充(类似于 JavaScript 的行为)。此模式还指示在 jsonb 对象中创建整个路径,如果路径的某些部分(不仅仅是最后一个元素)不存在。* JB_PATH_CONSISTENT_POSITION:赋值通过阻止元素前置来保持数组位置一致。这两个标志仅在 jsonb 下标赋值中使用。最初由 Nikita Glukhov 基于多态下标补丁提出,但转化为独立的更改。讨论:https://postgr.es/m/CA%2Bq6zcV8qvGcDXurwwgUbwACV86Th7G80pnubg42e-p9gsSf%3Dg%40mail.gmail.com 讨论:https://postgr.es/m/CA%2Bq6zcX3mdxGCgdThzuySwH-ApyHHM-G4oB1R0fn0j2hZqqkLQ%40mail.gmail.com 讨论:https://postgr.es/m/CA%2Bq6zcVDuGBv%3DM0FqBYX8DPebS3F_0KQ6OVFobGJPM507_SZ_w%40mail.gmail.com 讨论:https://postgr.es/m/CA%2Bq6zcVovR%2BXY4mfk-7oNk-rF91gH0PebnNfuUjuuDsyHjOcVA%40mail.gmail.com 作者:Dmitry Dolgov 审核人:Tom Lane、Arthur Zakirov、Pavel Stehule、Dian M Fay 审核人:Andrew Dunstan、Chapman Flack、Merlin Moncure、Peter Geoghegan 审核人:Alvaro Herrera、Jim Nasby、Josh Berkus、Victor Wagner 审核人:Aleksander Alekseev、Robert Haas、Oleg Bartunov https://git.postgresql.org/pg/commitdiff/81fcc72e66222357f9bccce3eeda62eb2cb29849
在赋值 jsonb 标量而不是复合对象时抛出错误。在 jsonb 下标赋值期间,提供的路径可能假设对象或数组,而源 jsonb 具有标量值。初始下标赋值逻辑将跳过此类更新操作,而不显示任何消息。此提交使其抛出错误以指示这种情况。讨论:https://postgr.es/m/CA%2Bq6zcV8qvGcDXurwwgUbwACV86Th7G80pnubg42e-p9gsSf%3Dg%40mail.gmail.com 讨论:https://postgr.es/m/CA%2Bq6zcX3mdxGCgdThzuySwH-ApyHHM-G4oB1R0fn0j2hZqqkLQ%40mail.gmail.com 讨论:https://postgr.es/m/CA%2Bq6zcVDuGBv%3DM0FqBYX8DPebS3F_0KQ6OVFobGJPM507_SZ_w%40mail.gmail.com 讨论:https://postgr.es/m/CA%2Bq6zcVovR%2BXY4mfk-7oNk-rF91gH0PebnNfuUjuuDsyHjOcVA%40mail.gmail.com 作者:Dmitry Dolgov 审核人:Tom Lane、Arthur Zakirov、Pavel Stehule、Dian M Fay 审核人:Andrew Dunstan、Chapman Flack、Merlin Moncure、Peter Geoghegan 审核人:Alvaro Herrera、Jim Nasby、Josh Berkus、Victor Wagner 审核人:Aleksander Alekseev、Robert Haas、Oleg Bartunov https://git.postgresql.org/pg/commitdiff/aa6e46daf5304e8d9e66fefc1a5bd77622ec6402
在 jsonb_subscript_assign() 中消除不必要的内存分配。当前代码为 JsonbValue 分配内存,但它可以本地放置。https://git.postgresql.org/pg/commitdiff/bb513b364b4fe31574574c8d0afbb2255268b321
Tom Lane 推送了
修复新 jsonbsubs 代码中的可移植性问题。在 sizeof(Datum) > sizeof(Oid) 的机器上(即任何 64 位平台),如果 nupper 为奇数,则先前的编码将计算出未对齐的 workspace->index 指针。不允许未对齐访问的架构将失败。这似乎解释了为什么 thorntail 不高兴但其他 buildfarm 成员却没有。 https://git.postgresql.org/pg/commitdiff/7c5d57caed4d8af705d0cc3131d0d8ed72b7a41d
修改 make_partition_pruneinfo 以不使用其 partitioned_rels 输入。事实证明,allpaths.c 中 [Merge]AppendPath.partitioned_rels 的计算是有缺陷的,有时会忽略相关的非叶子分区,从而允许提交 a929e17e5a8 添加的断言触发。与其修复它,不如完全删除这些字段。我们直到创建计划时才真正需要这些信息,并且为所选计划计算一次应该比为我们考虑的每个附加路径都计算要便宜。作为第一步,教 make_partition_pruneinfo 自己收集相关的分区表。通过使用 AppendRelInfo 链接从子表向上遍历到父表并不难做到。同时,进行一些小的样式改进;主要是,不要将“Relids”用作非计划程序考虑的任何关系的标识的 bitmapset 的别名。也尝试更好地记录逻辑。没有后向移植,因为在 a929e17e5a8 之前似乎没有实际问题。也没有新的回归测试;该错误所在的代码将在该补丁系列的末尾消失,因此纪念该问题似乎有点毫无意义。Tom Lane 和 David Rowley,根据 Andreas Seltenreich 和 Jaime Casanova 的报告。讨论:https://postgr.es/m/87sg8tqhsl.fsf@aurora.ydns.eu 讨论:https://postgr.es/m/CAJKUy5gCXDSmFs2c=R+VGgn7FiYcLCsEFEuDNNLGfoha=pBE_g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/fb2d645dd53ff571572d830e830fc8c368063802
删除 partitioned_rels 列表中的附带依赖项。事实证明,allpaths.c 中 [Merge]AppendPath.partitioned_rels 的计算是有缺陷的,有时会忽略相关的非叶子分区,从而允许提交 a929e17e5a8 添加的断言触发。与其修复它,不如完全删除这些字段。我们直到创建计划时才真正需要这些信息,并且为所选计划计算一次应该比为我们考虑的每个附加路径都计算要便宜。此补丁撤消了对 partitioned_rels 值的几个非常小的用法。createplan.c 正在测试 nil 值,以优化 make_partition_pruneinfo() 的准备工作。如果检查几乎是免费的,那么这是值得做的,但不值得花大力气来避免。create_append_path() 正在测试 nil 值,作为决定如何为 AppendPath 设置 ParamPathInfo 的一部分。我将其替换为检查 appendrel 的父 rel 是否已分区。这并不完全相同,但应该涵盖大多数情况。如果我们注意到任何有趣的优化损失,我们可以将其简化为当父级是 baserel 时始终使用更昂贵的方法。讨论:https://postgr.es/m/87sg8tqhsl.fsf@aurora.ydns.eu 讨论:https://postgr.es/m/CAJKUy5gCXDSmFs2c=R+VGgn7FiYcLCsEFEuDNNLGfoha=pBE_g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/5076f88bc985a7728eea337cbabae0e034b064b1
删除 [Merge]AppendPath.partitioned_rels。事实证明,allpaths.c 中 [Merge]AppendPath.partitioned_rels 的计算是有缺陷的,有时会忽略相关的非叶子分区,从而允许提交 a929e17e5a8 添加的断言触发。与其修复它,不如完全删除这些字段。我们直到创建计划时才真正需要这些信息,并且为所选计划计算一次应该比为我们考虑的每个附加路径都计算要便宜。前面的两次提交取消了对 partitioned_rels 值的所有使用;此提交只是机械地删除字段和计算它们的代码。讨论:https://postgr.es/m/87sg8tqhsl.fsf@aurora.ydns.eu 讨论:https://postgr.es/m/CAJKUy5gCXDSmFs2c=R+VGgn7FiYcLCsEFEuDNNLGfoha=pBE_g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f003a7522bfa11177dc52c65eb97273a1057dfba
文档:在正则表达式匹配的初始示例上多下点功夫。在 POSIX 正则表达式的开头和结尾编写不必要的 '.*'
并不会起到太大作用,只会让读者对是否真的有必要这样做感到困惑。使表 9.16 中的示例更贴近实际,并尝试将下一组示例变成自包含的示例。根据 rmzgrimes 的抱怨。向 v13 进行反向移植,因为它很简单。讨论:https://postgr.es/m/161215841824.14653.8969016349304314299@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/9522085ac917af66dba29939af328ae67300f10a
修复 contrib/auto_explain 中古老的内存泄漏。ExecutorEnd 钩子在一个可能持续很长时间的上下文中被调用,而不是我们认为的那样,在执行器自己的每个查询上下文中。因此,在生成 EXPLAIN 输出时产生的任何垃圾都可能在多个查询中累积。如果启用了 log_nested_statements,这会导致惊人的泄漏,即使没有启用,我也很惊讶之前没有人抱怨。为了修复这个问题,只需切换到执行器的上下文,这样当我们标准 ExecutorEnd 释放执行器状态时,我们分配的任何内容都将被释放。我们不妨也删除代码中零售的 pfree 对 explain 输出字符串的处理;这对于需求来说是可笑的不足。Japin Li,根据 Jeff Janes 的报告。这个错误很老了,因此反向移植到所有受支持的分支。讨论:https://postgr.es/m/CAMkU=1wCVtbeRn0s9gt12KwQ7PLXovbpM8eg25SYocKW3BT4hg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/5c0f7cc5442108e113d4fb88c952329b467e2c6a
删除 plpgsql 的 FOR 循环语句计数器的额外增量。这会在内部语句编号中留下空白,这并没有太大的危害(否则我们早就注意到了),但也不是很好。bbd5c207b 中的疏忽;反向移植到 v12,该版本引入了这个。Pavel Stehule 讨论:https://postgr.es/m/CAFj8pRDXyQaJmpotNTQVc-t-WxdWZC35V2PnmwOaV1-taidFWA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/dfcc46fe3030b0114b7a5715d5fa40819561c04b
文档:一致地标识可以为零的 OID 目录列。并非所有可以包含零(表示“无引用”)的 OID 引用列都在 catalogs.sgml 中明确标记。修复此问题,并尝试使样式更加一致,例如,在这些情况下,始终写“zero”而不是“0”。Joel Jacobson 和 Tom Lane 讨论:https://postgr.es/m/4ed9a372-7bf9-479a-926c-ae8e774717a8@www.fastmail.com https://git.postgresql.org/pg/commitdiff/479331406e8403cc2e75d1082f8c613e7669c113
在目录中构建一些关于外键关系的知识。这遵循 commit dfb75e478 的精神,该提交创建了主键和唯一性约束,以提高对系统目录施加的约束的可见性。虽然我们的目录包含许多类似外键的关系,但它们并不完全遵循 SQL 语义,因为省略引用的惯例是写零而不是 NULL。此外,我们还有一些情况,其中每个元素都应该是 FK 引用的数组;SQL 无法对此建模。因此,我们无法创建实际的外键约束来描述这种情况。尽管如此,我们可以收集和使用关于这些关系的知识。因此,此补丁在目录头文件中添加了注释,以声明外键关系。(BKI_LOOKUP 注释涵盖简单的情况,但我们之前没有区分哪些此类列允许包含零;我们还需要新的标记来表示多列 FK 引用。)然后,Catalog.pm 和 genbki.pl 被教会将此信息收集到新生成的头文件 "system_fk_info.h" 中的表中。目前唯一的用户是一个新的 SQL 函数 pg_get_catalog_foreign_keys(),它将表暴露给 SQL。oidjoins 回归测试被重写为使用 pg_get_catalog_foreign_keys() 来找出要检查的列。除了消除手动维护该测试脚本的需要之外,这还允许它覆盖许多旧的基于 findoidjoins 的实现未检查的关系。(截至此提交,测试检查了 217 个关系,而之前为 181 个。)讨论:https://postgr.es/m/3240355.1612129197@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/62f34097c88433ef1f3de604714fe7e7024f2fdf
弃用 findoidjoins。在 commit 62f34097c 之后,我们不再需要此工具。讨论:https://postgr.es/m/3240355.1612129197@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ef3d4613c0204ab2b87ffa7e8e9551d74f932816
删除命名空间和角色 OID 的特殊 BKI_LOOKUP 魔术。现在 commit 62f34097c 将 BKI_LOOKUP 注释附加到目录中的所有命名空间和角色 OID 列,因此没有真正的理由保留魔术 PGNSP 和 PGUID 符号。删除它们,而是根据 genbki.pl 的正常模式实现这些查找。这意味着在目录头文件中,BKI_DEFAULT(PGNSP) 变为 BKI_DEFAULT(pg_catalog),这似乎更加透明。BKI_DEFAULT(PGUID) 变为 BKI_DEFAULT(POSTGRES),这可能不那么透明;但是您可以查看 pg_authid.dat 以发现 POSTGRES 是引导超级用户的临时名称。此更改还意味着,如果我们曾经需要在初始目录数据中交叉引用除了 POSTGRES 之外的任何其他内置角色,或者除了 pg_catalog 之外的其他一些内置模式,我们可以直接这样做。这里没有 catversion 增加,因为 postgres.bki 的内容没有实际更改。讨论:https://postgr.es/m/3240355.1612129197@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ba0faf81c65ac99dd42ce192f3257d4d2231ea50
避免在准备好的语句中回滚时崩溃。如果使用门户运行包含 ROLLBACK 的准备好的 CALL 或 DO 语句,则 PortalRunMulti 会失败,因为门户的语句列表会被回滚清除。(由于语法不允许在 PREPARE 中使用 CALL/DO,因此唯一到达此处的简单方法是通过扩展查询协议,该协议将所有输入都视为准备好的语句。)由于资源管理问题,很难避免过早重置门户,因此通过教导 PortalRunMulti 警惕 portal->stmts 突然变为 NIL 来解决此问题。仅在 v13 和 HEAD 中观察到崩溃(由于 commit 1cff1b95a 添加了额外的 portal->stmts 接触)。但即便在此之前,所涉及的代码也触摸了门户不再有任何声明权的列表。在手头的测试用例中,该列表仍然存在,因为缓存的计划中存在另一个引用计数;但我远不确信控制返回到 PortalRunMulti 时缓存的计划不可能被删除。因此,反向移植到添加嵌套事务的 v11。Thomas Munro 和 Tom Lane,根据 James Inform 的错误 #16811。讨论:https://postgr.es/m/16811-c1b599b2c6c2d622@postgresql.org https://git.postgresql.org/pg/commitdiff/9624321ec502f4e4f4722290b358694049447f95
修复 YA 增量排序错误。如果 switchToPresortedPrefixMode() 在完整排序组的最后一个元组处检测到批处理边界,则会执行错误的操作。最初报告的症状是“在有界排序中检索的元组太多”错误,但是此处添加的测试用例在没有此补丁的情况下只会默默地给出错误的答案。我 (tgl) 对在没有增量排序作者审查的情况下提交此补丁感到不满意,但他们似乎都无法联系,而我们的发布期限很紧迫。无论如何,这确实可以使某些情况变得更好。根据 Yoran Heling 的错误 #16846。反向移植到引入增量排序的 v13。Neil Chen 讨论:https://postgr.es/m/16846-ae49f51ac379a4cb@postgresql.org https://git.postgresql.org/pg/commitdiff/82e0e29308dedbc6000e73329beb112ae7e1ad39
修复 HashAgg 选择性列溢出逻辑中的错误。commit 230230223 教导 nodeAgg.c,当从内存中溢出超大的哈希聚合中的元组时,它只需要溢出节点 tlist 和 quals 中引用的输入列。不幸的是,这是错误的:我们还必须保存分组列。该错误在常见情况下被掩盖了,因为分组列也出现在 tlist 中,但这不一定是真的。其中不成立的计划的主要类别似乎来自半连接(“WHERE outercol IN (SELECT innercol FROM innertable)”),其中 innercol 需要隐式提升才能使其与 outercol 可比。分组列将为 "innercol::promotedtype",但该表达式不会出现在 Agg 节点自己的 tlist 和 quals 中;仅在 tlist 中找到裸 "innercol"。我花了很多时间寻找此问题的合适的回归测试用例,但没有太多成功。如果 innercol 的不同值的数量足够大以至于发生溢出,则规划器倾向于更喜欢非 HashAgg 计划,至少对于在回归测试中使用的合理问题大小而言是这样。因此,没有新的回归测试。但是,此补丁确实可以证明修复了最初报告的测试用例。根据 s.p.e (at) gmx-topmail.de 的报告。反向移植到引入麻烦代码的 v13。讨论:https://postgr.es/m/trinity-1c565d44-159f-488b-a518-caf13883134f-1611835701633@3c-app-gmx-bap78 https://git.postgresql.org/pg/commitdiff/0ff865fbe50e82f17df8a9280fa01faf270b7f3f
禁止将继承子表转换为视图。通常,继承树的成员必须是普通表(或在较新的版本中,是外表)。ALTER TABLE INHERIT 拒绝创建在任一端都有视图的继承关系。当 DefineQueryRewrite 尝试将关系转换为视图时,它已经有检查禁止对分区父级或子级以及传统的继承父级进行此操作……但是它忽略了检查是否正在转换传统的继承子级。由于规划器假设任何继承子级都是一个表,因此这导致制定尝试对视图进行物理扫描的计划,从而导致失败(甚至在最近的版本中会导致崩溃)。可以想象尝试通过正常展开视图来支持这种情况,但是由于重写器在规划器进行继承展开之前运行,因此需要一些非常基本的重构才能使其成为可能。系统的其他许多部分可能也无法很好地处理这种情况。目前,只是禁止这样做。根据 Yang Lin 的错误 #16856。反向移植到所有受支持的分支。(在 v10 之前的版本中,这包括反向移植 commit 501ed02cf 中添加 has_superclass() 的部分。也许缺少该基础结构部分解释了缺失的检查。)讨论:https://postgr.es/m/16856-0363e05c6e1612fd@postgresql.org https://git.postgresql.org/pg/commitdiff/dd705a039f6cd41921529fa4e971d70b224be052
在将 CTE 列表复制到规则中时,传播 CTE 属性标志。rewriteRuleAction() 忽略了这一步,尽管它小心地传播了其他类似的标志,如 hasSubLinks 或 hasRowSecurity。目前,忽略传输 hasRecursive 只是表面上的问题,但是忽略 hasModifyingCTE 则是一个实际的错误,因为执行器肯定会检查它。提议的测试用例仅在 v10 版本中失败,但是由于执行器在 9.x 版本中也会检查 hasModifyingCTE,我怀疑可以设计一个在旧分支中失败的测试用例。考虑到发布截止日期临近,我不会花时间寻找更好的测试了。报告和补丁由 Greg Nancarrow 提供,由我进行表面上的修改。讨论:https://postgr.es/m/CAJcOf-fAdj=nDKMsRhQzndm-O13NY4dL6xGcEvdX5Xvbbi0V7g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ed290896335414c6c069b9ccae1f3dcdd2fac6ba
还原 “在将 CTE 列表复制到规则中时,传播 CTE 属性标志”。此操作会还原提交 ed290896335414c6c069b9ccae1f3dcdd2fac6ba 以及等效的后向分支提交。这个问题比我想象的要微妙得多,而且绝非是新的问题,所以在发布截止日期之前不应该对它进行修改。我们将稍后花些时间考虑如何处理。讨论:https://postgr.es/m/CAJcOf-fAdj=nDKMsRhQzndm-O13NY4dL6xGcEvdX5Xvbbi0V7g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d1d2979852538d7021cc809a40ef127d59747697
Michaël Paquier 推送了
引入 --with-ssl={openssl} 作为配置选项。这是现有 --with-openssl 的替代方案,扩展了逻辑以便更容易添加新的 SSL 库。选择的语法类似于 --with-uuid,其中可以选择多个值,目前仅支持 “openssl” 值。原始开关 --with-openssl 为了兼容性而保留。作者:Daniel Gustafsson,Michael Paquier。审阅人:Jacob Champion。讨论:https://postgr.es/m/FAB21FC8-0F62-434F-AA78-6BD9336D630A@yesql.se https://git.postgresql.org/pg/commitdiff/fe61df7f82aa6e0879476146dbe1da9c89b4946b
从初始 tablesync 查询中删除未使用的列 atttypmod。逻辑复制进行的初始 tablesync 使用一个查询来获取关系列的信息,其中包括 atttypmod,但是该列未被使用。这是通过 7c4f524 添加的。作者:Euler Taveira。审阅人:Önder Kalacı、Amit Langote、Japin Li。讨论:https://postgr.es/m/CAHE3wggb715X+mK_DitLXF25B=jE6xyNCH4YOwM860JR7HarGQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4ad31bb2ef2517b6e49ea9e8f01aaed250d4df38
向 REINDEX 添加 TABLESPACE 选项。此补丁添加了在重建索引时将索引移动到新的表空间的可能性。支持并发和非并发情况,并应用以下限制:- 当对目标为分区表或索引的 REINDEX 命令使用 TABLESPACE 时,叶子分区的所有索引都会移动到新的表空间。pg_class.reltablespace 中非叶子、分区表的表空间引用不会更改。这需要额外的 ALTER TABLE SET TABLESPACE。- 作为父表一部分重建的 toast 表上的任何索引都保留在其原始表空间中。- 禁止在系统目录上执行此操作,包括尝试使用 REINDEX 直接移动 toast 关系。如果对单个对象执行 REINDEX,这将导致错误。使用 TABLESPACE 时,REINDEX SCHEMA、DATABASE 和 SYSTEM 会跳过系统关系。作者:Alexey Kondratov、Michael Paquier、Justin Pryzby。审阅人:Álvaro Herrera、Michael Paquier。讨论:https://postgr.es/m/8a8f5f73-00d3-55f8-7583-1375ca8f6a91@postgrespro.ru https://git.postgresql.org/pg/commitdiff/c5b286047cd698021e57a527215b48865fd4ad4e
澄清 tablesync.c 中的注释。作者:Peter Smith。审阅人:Amit Kapila、Michael Paquier、Euler Taveira。讨论:https://postgr.es/m/CAHut+Pt9_T6pWar0FLtPsygNmme8HPWPdGUyZ_8mE1Yvjdf0ZA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/fc749bc7041cb77b5f6b58c129ad2616a3f7ab4f
确保使用 REINDEX (TABLESPACE) 删除旧索引文件。补丁的原始版本包含此部分,但由于我这边的一个合并错误,导致这一部分丢失。在 c5b28604 中的疏忽。https://git.postgresql.org/pg/commitdiff/5128483d064038702f535aced2cbaa43256db214
澄清 xlog.c 中关于 SharedRecoveryState 的一些注释。从提交 4e87c48 开始,SharedRecoveryState 已从布尔值切换为枚举,但一些注释仍然将其称为布尔值。作者:Amul Sul。审阅人:Dilip Kumar、Kyotaro Horiguchi。讨论:https://postgr.es/m/CAAJ_b97Hf+1SXnm8jySpO+Fhm+-VKFAAce1T_cupUYtnE3Nxig https://git.postgresql.org/pg/commitdiff/f7400823c3bd6ce03c2fe1bec5b7066bad146809
Peter Eisentraut 推送了
SEARCH 和 CYCLE 子句。这增加了 SQL 标准功能,该功能向递归查询添加了 SEARCH 和 CYCLE 子句,以便能够生成广度优先或深度优先搜索顺序并检测循环。这些子句可以使用现有语法重写为查询,而这正是此补丁在重写器中所做的。审阅人:Vik Fearing vik@postgresfriends.org。审阅人:Pavel Stehule pavel.stehule@gmail.com。讨论:https://postgresql.ac.cn/message-id/flat/db80ceee-6f97-9b4a-8ee8-3ba0c58e5be2@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/3696a600e2292d43c00949ddf0352e4ebb487e5b
改进令人困惑的变量名称。原型将 pgstat_progress_update_multi_param() 的第二个参数称为 “index”,一些调用者也以这种方式命名其局部变量。但是,当周围的代码处理索引关系时,这会令人困惑,并且在至少一种情况下会遮蔽另一个引用索引关系的变量。调整这些调用点,使其具有更清晰的局部变量命名,类似于 indexcmds.c 中的现有调用者。https://git.postgresql.org/pg/commitdiff/1d71f3c83c113849fe3aa60cb2d2c12729485e97
pg_dump:修复继承的生成列的转储。生成列的生成表达式始终是继承的,因此无需在子表中单独设置它们,也没有这样做的语法。以前的代码使用了用于处理默认值的代码路径,该代码路径应用了不同的规则;特别是它可能希望为继承的列显式设置默认值。这导致了无法恢复的转储。对于生成的列,只需在继承的表中跳过它们。审阅人:Tom Lane tgl@sss.pgh.pa.us。讨论:https://postgresql.ac.cn/message-id/flat/15830.1575468847%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0bf83648a52df96f7c8677edbbdf141bfa0cf32b
重构 Windows 错误消息以方便翻译。在引用用户权限 “锁定内存页” 的错误消息中,这是一个来自 Windows 操作系统的术语,因此应根据操作系统的本地化进行翻译。重构错误消息,使其更简单、更清晰。此外,修复大小写以匹配操作系统中现有的大小写。https://git.postgresql.org/pg/commitdiff/3c78e0569ca04f4c92f0adcd74471398bb7b2e55
Robert Haas 推送了
从 processSQLNamePattern 中分解模式构造逻辑。将类似 psql 和 pg_dump 等实用程序支持的 shell-glob 样式的语法转换为正则表达式的逻辑提取到一个新的函数 patternToSQLRegex 中。现有的函数 processSQLNamePattern 现在使用此函数作为子例程。patternToSQLRegex 比 processSQLNamePattern 所需的功能稍微通用一些。该函数仅对最多可以有 2 个部分的模式感兴趣,即模式和关系;但是 patternToSQLRegex 可以将最大部分数限制在 1 到 3 之间,以便模式看起来像 “database.schema.relation”、“schema.relation” 或 “relation”,具体取决于它的调用方式和用户的指定。processSQLNamePattern 仅传递两个缓冲区,因此工作方式与以前完全相同,始终将模式解释为 “schema.relation” 模式或 “relation” 模式。但是,未来的调用者可以以其他方式使用此函数。Mark Dilger,由我审阅。作为其中一部分的更大补丁系列也接受了 Peter Geoghegan、Andres Freund、Álvaro Herrera、Michael Paquier 和 Amul Sul 的审阅,但我不知道他们是否专门审阅了这一部分。讨论:http://postgr.es/m/12ED3DA8-25F0-4B68-937D-D907CFBF08E7@enterprisedb.com 讨论:http://postgr.es/m/5F743835-3399-419C-8324-2D424237E999@enterprisedb.com 讨论:http://postgr.es/m/70655DF3-33CE-4527-9A4D-DDEB582B6BA0@enterprisedb.com https://git.postgresql.org/pg/commitdiff/2c8726c4b0a496608919d1f78a5abc8c9b6e0868
将一些代码从 src/bin/scripts 移动到 src/fe_utils 以允许重用。并行槽基础设施(实现客户端对执行类似操作的服务器连接的多路复用,而不是线程或多个进程或任何类似的东西)从 src/bin/scripts/scripts_parallel.c 移动到 src/fe_utils/parallel_slot.c。以前是 src/bin/scripts/common.c 一部分的函数 consumeQueryResult() 和 processQueryResult() 现在也移到该文件中,成为静态辅助函数。将来可能需要更改这一点,但目前它们没有用于任何其他用途。src/bin/scripts/common.c 中的其他一些函数被移动到 src/fe_utils 中,并在多个文件中拆分。connectDatabase()、connectMaintenanceDatabase() 和 disconnectDatabase() 移动到 connect_utils.c。executeQuery()、executeCommand() 和 executeMaintenanceCommand() 移动到 query_utils.c。handle_help_version_opts() 移动到 option_utils.c。Mark Dilger,由我审阅。作为其中一部分的更大补丁系列也接受了 Peter Geoghegan、Andres Freund、Álvaro Herrera、Michael Paquier 和 Amul Sul 的审阅,但我不知道他们是否专门审阅了这一部分。讨论:http://postgr.es/m/12ED3DA8-25F0-4B68-937D-D907CFBF08E7@enterprisedb.com 讨论:http://postgr.es/m/5F743835-3399-419C-8324-2D424237E999@enterprisedb.com 讨论:http://postgr.es/m/70655DF3-33CE-4527-9A4D-DDEB582B6BA0@enterprisedb.com https://git.postgresql.org/pg/commitdiff/e955bd4b6c2bcdbd253837f6cf4c7520b98e69d4
通用化并行槽结果处理。不要采用硬编码的方式忽略丢失的表并报告所有其他错误,而是让调用者通过设置回调来决定如何处理。Mark Dilger,经我审阅并略作修改。这个较大的补丁系列还得到了 Peter Geoghegan、Andres Freund、Álvaro Herrera、Michael Paquier 和 Amul Sul 的审阅,但我不知道他们是否专门审阅了这部分。讨论:http://postgr.es/m/12ED3DA8-25F0-4B68-937D-D907CFBF08E7@enterprisedb.com 讨论:http://postgr.es/m/5F743835-3399-419C-8324-2D424237E999@enterprisedb.com 讨论:http://postgr.es/m/70655DF3-33CE-4527-9A4D-DDEB582B6BA0@enterprisedb.com https://git.postgresql.org/pg/commitdiff/418611c84d004f45d92bcaa3f8e100385d96cd41
Heikki Linnakangas 推送
修复 COPY FROM 进度报告中的小错误。已处理的字节数累积略有错误。在向输入缓冲区加载更多数据后,我们将缓冲区中的字节数添加到总和中。但是,在多字节字符或转义的情况下,缓冲区中可能会遗留一些来自先前加载的未处理字节。这些字节被重复计算了。https://git.postgresql.org/pg/commitdiff/2f86ab305e7fbc7b84960079551cf9cafd29684f
修复 COPY FROM 中反斜杠转义多字节字符的问题。如果多字节字符在 TEXT 模式输入中用反斜杠转义,并且编码是客户端专用编码之一,其中第一个字节之后的字节可以在字符中“嵌入”一个 ASCII 字节,那么我们没有正确跳过该字符。在反斜杠之后,我们只跳过了下一个字符的第一个字节,因此如果它是一个多字节字符,我们将尝试将其第二个字节作为单独的字符进行处理。如果它是具有特殊含义的字符之一,例如“\n”、“\r”或另一个“\”,这将导致问题。一个这样的例子是 Big5 编码中的字节序列“\x5ca45c2e666f6f”。它应该是 [反斜杠][双字节字符][.][f][o][o],但是由于双字节字符的第二个字节是 0x5c,我们错误地将其视为另一个反斜杠。并且由于下一个字符是点号,我们将其解析为复制结束标记,并抛出“复制结束标记损坏”错误。回溯到所有受支持的版本。审核人:John Naylor,Kyotaro Horiguchi 讨论:https://postgresql.ac.cn/message-id/a897f84f-8dca-8798-3139-07da5bb38728%40iki.fi https://git.postgresql.org/pg/commitdiff/c444472af5c202067a9ecb0ff8df7370fb1ea8f4
Peter Geoghegan 推送
增强 nbtree 页面删除的健壮性。在索引删除的第二阶段添加一些额外的防御性检查,以检测和报告 VACUUM 期间的索引损坏,并避免 VACUUM 在更多情况下卡住。尽管尚不清楚这是否真的重要,但该代码在存在兄弟链接的循环链的情况下仍然不够健壮。这是对提交 3a01f68e 的后续工作。新的防御性检查依赖于这样一个假设,即对于一个索引,在任何给定时间最多只能运行一个 VACUUM 操作。删除一个旧的注释,该注释表明这里需要考虑多个并发 VACUUM。现在看来,这种担忧不太可能具有任何实际意义,因为我们显然在其他几个地方依赖于相同的假设。例如,在同一函数中出现(由提交 efada2b8e92 添加)的更新的注释也做出了相同的假设。还在相关代码路径中添加了 CHECK_FOR_INTERRUPTS()。与提交 3a01f68e 添加的注释相反,实际上可以在此处处理中断,至少在叶级进行处理的常见情况下是这样。我们仅在叶级向右步进时,才在 leafbuf/目标页面上保持锁定。由于在提交 3a01f68e 向同一区域添加增强功能后没有收到任何投诉,因此不进行回溯。https://git.postgresql.org/pg/commitdiff/c34787f910585f82320f78b0afd53a6a170aa229
为保持一致性,重命名可移除的 xid 函数。GlobalVisIsRemovableFullXid() 现在为 GlobalVisCheckRemovableFullXid()。这与处理 TransactionId 值的函数的 FullTransactionId 等价物的通用约定一致。它现在与附近的 GlobalVisCheckRemovableXid() 函数匹配,后者对使用 TransactionId 值的调用者执行相同的检查。提交 dc7420c2c92 中的疏忽。讨论:https://postgr.es/m/CAH2-Wzmes12jFNDcVgpU89Vp=r6uLFrE-MT0fjSWGsE70UiNaA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/617fffee8a6f350ff03069e2843ecd039ea06ccc
Thomas Munro 推送
Etsuro Fujita 推送
Tatsuo Ishii 推送
Kyotaro HORIGUCHI 发送了另一个补丁修订版,以使其能够按照 X.509 规范使用 CRL(证书吊销列表)目录。
Zeng Wenjing 发送了另一个补丁修订版,以实现全局临时表。
Scott Mead 发送了一个补丁,允许将 cost_limit 重新计算到最大允许值(当前为 10,000)。这具有允许用户重新加载配置更改的效果,并且可以通过设置 cost_limit 或 cost_delay 来“加速”正在进行的 vacuum。
Paul Martinez 发送了另一个补丁修订版,以阐明 pg_hba.conf 规则拒绝的是逻辑复制连接还是物理复制连接。
Thomas Munro 发送了另一个补丁修订版,以使用全局屏障来修复 Windows 上的 DROP TABLESPACE,并对 ProcSignalBarriers 使用条件变量。
Euler Taveira de Oliveira 发送了另一个补丁修订版,以实现逻辑复制的行过滤。
Aleksey Kondratov 和 Michaël Paquier 交换了补丁,以允许 CLUSTER、VACUUM FULL 和 REINDEX 动态更改表空间。
Etsuro Fujita 发送了另一个补丁修订版,以在 postgres_fdw 节点上实现异步 Append。
Hou Zhijie 和 Greg Nancarrow 交换了补丁,以添加 GUC 和并行运行 DML 的功能。
Daniel Gustafsson 和 Jacob Champion 交换了补丁,以使可以将 NSS 用作 libpq 的 TLS 后端。
Heikki Linnakangas 发送了两个补丁修订版,以便以较大的块执行 COPY FROM 编码转换。
Bruce Momjian 发送了另一个补丁修订版,以实现密钥管理。
John Naylor 发送了两个补丁修订版,以使用 SIMD 指令验证 UTF-8。
Amit Kapila、Peter Smith 和 Takamichi Osumi 交换了补丁,以使 tablesync 工作进程能够并行运行。
Pavel Stěhule 发送了另一个补丁修订版,以实现模式变量。
Justin Pryzby 发送了一个补丁,以删除已弃用的 v8.2 包含运算符。
Noah Misch 发送了一个补丁,以修复 KeepFileRestoredFromArchive() 和 restartpoint 之间的竞争。
Peter Eisentraut 发送了一个补丁,以通过添加详细消息来改进新的哈希分区边界检查错误消息,该消息显示了涉及的特定数字。
Iwata Aya 发送了另一个补丁修订版,以向 libpq 添加跟踪功能。
Julien Rouhaud 发送了三个补丁修订版,以允许 HEAP_XMAX_LOCK_ONLY 和 HEAP_KEYS_UPDATED 的组合。此提示位组合以前被检测为一种损坏形式,但可以通过 SELECT ... FOR UPDATE 和 UPDATE 查询的一些组合获得。
Atsushi Torikoshi 和 Fujii Masao 交换了补丁,以向 pg_locks 添加 wait_start 列。
Greg Nancarrow 发送了两个补丁修订版,以并行实现 INSERT ... SELECT。
Mark Rofail 发送了四个补丁修订版,以实现外键数组。
Álvaro Herrera 发送了另一个补丁修订版,以添加 pg_atomic_monotonic_advance_u64,并使用相同的方法使 LogwrtResult 成为原子操作。
David Rowley 发送了另一个补丁修订版,以实现结果缓存节点,并使用相同的方法来缓存来自子计划的结果。
Vigneshwaran C 发送了另一个补丁修订版,以使用数据库超级用户可访问的新 pg_print_backtrace() 函数,使得可以打印指定 postgres 进程的回溯。
Peter Eisentraut 发送了一个补丁到 pg_dump,以向 dump 函数的 *info 参数添加 const 修饰符,以阐明它们不修改该参数。
Daniel Gustafsson 发送了另一个补丁修订版,以支持在运行的实例中启用/禁用校验和。
Peter Smith 发送了一个补丁,旨在修复一个错误,该错误表现为 DROP TABLE 会破坏同步工作进程 relid。
Heikki Linnakangas 发送了两个补丁修订版,以删除服务器和 libpq 对旧 FE/BE 协议版本 2 的支持,并通过强制预读来简化 COPY FROM 解析。
Mark Dilger 发送了两个补丁修订版,以实现 pg_amcheck。
Tomáš Vondra 发送了另一个补丁修订版,以实现 BRIN 多范围索引。
Bharath Rupireddy 发送了另一个 postgres_fdw 的补丁修订版,该补丁在 FDW 和全局级别都添加了 keep_connections GUC,以指示不缓存连接。
David Rowley 发送了另一个补丁修订版,以实现 tid 扫描,这与现有的 tid 探测不同。
Bertrand Drouvot 发送了另一个补丁修订版,以在备用服务器上实现最小逻辑解码。
Bruce Momjian 发送了两个补丁修订版,旨在修复一个错误,该错误表现为在单个检查点中多次完全页面写入。
Amit Langote 发送了另一个补丁修订版,以使对继承树的更新和删除具有更好的可扩展性。
Ronan Dunklau 和 Michaël Paquier 交换了补丁,以在 REINDEX CONCURRENTLY 上保留 attstattarget。
Shenhao Wang、Kyotaro HORIGUCHI 和 Hayato Kuroda 交换了补丁,以修复 ecpg 连接字符串中的解析错误。
Dilip Kumar 发送了三个补丁修订版,以提供一个新接口来获取恢复暂停状态。
Peter Smith 和 Amit Kapila 交换了补丁,以使 pg_replication_origin_drop 对并发删除安全。
Amit Langote 发送了另一个补丁修订版,以防止跨分区更新期间的 FDW 插入批处理。
Li Japin 发送了另一个补丁修订版,以实现 ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION。
Stephen Frost 发送了另一个补丁修订版,以改进自动清理和自动分析的日志记录。
Jacob Champion 发送了一个补丁,以调整 Kerberos 测试。
Dilip Kumar 发送了另外两个补丁修订版,以实现表的自定义压缩方法。
Masahiro Ikeda 发送了另一个补丁修订版,以将 WAL 写入/fsync 统计信息添加到 pg_stat_wal。
Justin Pryzby 发送了另一个补丁修订版,以使 CLUSTER 在分区索引上工作。
Heikki Linnakangas 发送了一个补丁,使 psql 的 \copy 以更大的块向服务器发送数据。
Kazutaka Onishi 发送了另外两个补丁修订版,以实现对外部表(一般情况下)以及在 PostgreSQL FDW 中使用 TRUNCATE。
Tom Lane 发送了另一个补丁修订版,以修复 postgres_fdw 排序规则处理。
Pavel Stěhule 发送了另一个补丁修订版,通过返回变量内容的文本值来增强 PL/pgsql 调试 API。
Haiying Tang 发送了一个补丁,以支持 psql 中大写字符输入的制表符补全。
Atsushi Torikoshi 发送了另一个补丁修订版,以将计划类型添加到 pg_stat_statements。
Takamichi Osumi 发送了另外两个补丁修订版,以向 tablesync worker 添加测试。
Michaël Paquier 发送了另一个补丁修订版,以向 VACUUM 添加 PROCESS_TOAST 选项。