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 提供。
请在太平洋标准时间(PST8PDT)周日晚上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 不满意,而其他构建农场成员却没有。 https://git.postgresql.org/pg/commitdiff/7c5d57caed4d8af705d0cc3131d0d8ed72b7a41d
修改 make_partition_pruneinfo 以不再使用其 partitioned_rels 输入。事实证明,allpaths.c 中 partitioned_rels 的计算是错误的,有时会省略相关的非叶分区,从而允许提交 a929e17e5a8 添加的断言触发。与其修复该问题,不如彻底删除这些字段。我们直到 create_plan 时才真正需要这些信息,一次性计算所选计划的成本应低于考虑每个 append path 的成本。作为第一步,让 make_partition_pruneinfo 自己收集相关的分区表。通过使用 AppendRelInfo 链接从子表向上遍历到父表,这并不难。同时,进行一些小的风格改进;主要是,不要将“Relids”别名用于非规划器考虑的任何关系的身份的位图集。也尝试更好地记录逻辑。不进行向后移植,因为在 a929e17e5a8 之前似乎没有实时问题。也没有新的回归测试;此补丁系列的末尾将不再存在错误所在的 code,因此纪念此问题似乎有些无意义。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 添加的断言触发。与其修复该问题,不如彻底删除这些字段。我们直到 create_plan 时才真正需要这些信息,一次性计算所选计划的成本应低于考虑每个 append path 的成本。前面的两个提交消除了对 partitioned_rels 值的所有使用;此提交仅机械地删除字段和计算它们的 code。讨论: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 添加的断言触发。与其修复该问题,不如彻底删除这些字段。我们直到 create_plan 时才真正需要这些信息,一次性计算所选计划的成本应低于考虑每个 append path 的成本。前面的两个提交消除了对 partitioned_rels 值的所有使用;此提交仅机械地删除字段和计算它们的 code。讨论: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 hook 在一个可能非常长寿的上下文中被调用,而不是执行器的自己的每个查询上下文,正如我认为我们一直在假设的那样。因此,在生成 EXPLAIN 输出时产生的任何临时数据都可能在多个查询中累积。这可能导致严重的泄漏(如果 log_nested_statements 为开启状态),即使没有它,我也很惊讶之前没有人抱怨过。为了修复,只需切换到执行器的上下文,以便我们分配的任何内容都会在 standard_ExecutorEnd 释放执行器状态时被释放。我们不妨也移除 code 的零售 pfree 解释输出字符串;这对于需求来说非常不足。Japin Li,根据 Jeff Janes 的报告。此 bug 历史悠久,因此向所有支持的分支向后移植。讨论: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
在目录中构建一些关于外键关系的知识。这遵循了提交 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。在提交 62f34097c 之后,我们不再需要此工具。讨论:https://postgr.es/m/3240355.1612129197@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ef3d4613c0204ab2b87ffa7e8e9551d74f932816
移除对命名空间和角色 OID 的特殊 BKI_LOOKUP 魔法。现在提交 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 是引导超级用户的 nonce 名称。此更改还意味着,如果我们以后需要在初始目录数据中交叉引用除 POSTGRES 之外的任何其他内置角色,或者除了 pg_catalog 之外的任何其他内置模式,我们都可以做到。这里没有 catversion 升级,因为 postgres.bki 的内容实际上没有改变。讨论:https://postgr.es/m/3240355.1612129197@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ba0faf81c65ac99dd42ce192f3257d4d2231ea50
避免在预备语句中回滚时崩溃。如果使用 portal 来运行包含 ROLLBACK 的预备 CALL 或 DO 语句,PortalRunMulti 会失败,因为 rollback 会清除 portal 的语句列表。(由于语法不允许在 PREPARE 中使用 CALL/DO,因此获得此状态的唯一简单方法是通过扩展查询协议,该协议将所有输入视为预备语句。)由于资源管理问题,很难避免过早重置 portal,因此通过让 PortalRunMulti 警惕 portal->stmts 突然变为 NIL 来解决此问题。仅在 v13 和 HEAD 中观察到崩溃(这是由于 commit 1cff1b95a 添加了对 portal->stmts 的额外处理)。但即使在那之前,code 也触及了一个 portal 不再拥有任何控制权的 List。在当前测试用例中,List 仍然存在,因为对缓存计划有另一个引用计数;但我远不相信在控制权返回 PortalRunMulti 之前缓存计划被删除是不可能的。因此,向 v11(嵌套事务被添加的地方)向后移植。Thomas Munro 和 Tom Lane,根据 James Inform 的 bug #16811。讨论:https://postgr.es/m/16811-c1b599b2c6c2d622@postgresql.org https://git.postgresql.org/pg/commitdiff/9624321ec502f4e4f4722290b358694049447f95
修复 YA 增量排序 bug。如果 switchToPresortedPrefixMode() 检测到批处理边界恰好在完整排序组的最后一个元组处,它会做错事。最初报告的症状是“在有界排序中检索了过多元组”错误,但此处添加的测试用例在没有此补丁的情况下会默默地给出错误答案。我(tgl)不满意在没有增量排序作者审查的情况下提交此补丁,但他们似乎失踪了,我们正面临发布截止日期。反正这确实使一些情况有所改善。根据 Yoran Heling 的 bug #16846。向 v13(增量排序被引入的地方)向后移植。Neil Chen 讨论:https://postgr.es/m/16846-ae49f51ac379a4cb@postgresql.org https://git.postgresql.org/pg/commitdiff/82e0e29308dedbc6000e73329beb112ae7e1ad39
修复 HashAgg 选择性列溢出逻辑中的 bug。提交 230230223 教会了 nodeAgg.c,当从内存中溢出元组以进行超额哈希聚合时,它只需要溢出节点 tlist 和 quals 中引用的输入列。不幸的是,这是错误的:我们还必须保存分组列。错误在常见情况下被掩盖,因为分组列也出现在 tlist 中,但这不一定成立。看起来不成立的主要计划类别来自 semijoins(“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(有问题的 code 进入的地方)向后移植。讨论: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 尝试将关系转换为视图时,它已经有检查禁止这样做,以防止分区父表或子表以及传统继承父表……但它忽略了检查传统继承子表未被转换。由于规划器假定任何继承子表都是表,这导致创建尝试在视图上执行物理扫描的计划,从而导致失败(在最近的版本中甚至崩溃)。人们可以设想通过正常展开视图来支持这种情况,但由于 rewriter 在规划器执行继承展开之前运行,因此需要进行一些非常基础的重构才能实现。系统中的其他许多部分可能也无法很好地处理这种情况。现在,只需禁止它。根据 Yang Lin 的 bug #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 是一个实际的 bug,因为执行器肯定会查看它。提议的测试用例目前只失败到 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 属性标志”。这撤销了 commit 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} 作为 configure 选项。这是现有 --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 使用了一个查询来获取 relation 的列信息,该信息包含 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 选项。此补丁增加了在重建索引时将索引移动到新表空间的可能性。支持并发和非并发情况,并适用以下限制:- 使用 TARGETABLESPACE 与针对分区表或索引的 REINDEX 命令时,所有叶分区的索引将被移动到新表空间。非叶分区表的表空间引用在 pg_class.reltablespace 中不会改变。这需要额外的 ALTER TABLE SET TABLESPACE。- 作为父表一部分重建的 toast 表上的任何索引都保留在其原始表空间中。- 该操作禁止在系统目录上执行,包括尝试使用 REINDEX 直接移动 toast 关系。如果对单个对象执行 REINDEX,将导致错误。REINDEX SCHEMA、DATABASE 和 SYSTEM 在使用 TARGETABLESPACE 时会跳过系统关系。作者: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 周围的一些注释。自 commit 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 子句,以便能够产生广度优先或深度优先搜索顺序并检测循环。这些子句可以重写为使用现有语法的查询,而此补丁在 rewriter 中执行此操作。审阅者: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:修复继承生成列的转储。生成列的生成表达式始终是继承的,因此无需在子表中单独设置它们,也没有语法可以这样做。code 之前使用了处理默认值的 code 路径,其中适用不同的规则;特别是,它可能希望为继承的列显式设置默认值。这导致无法恢复的转储。对于生成列,只需在继承表中跳过它们。审阅者: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 错误消息以便于翻译。在引用用户权限“Lock pages in memory”的错误消息中,这是 Windows 操作系统中的一个术语,因此应根据操作系统本地化进行翻译。重构错误消息,使其更容易和更清晰。还修复了 capitalization 以匹配操作系统中现有的 capitalization。 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
将一些 code 从 src/bin/scripts 移到 src/fe_utils 以便重用。并行 slot 基础设施(它实现了服务器连接的客户端侧多路复用,不是线程或多个进程或类似的东西)已从 src/bin/scripts/scripts_parallel.c 移到 src/fe_utils/parallel_slot.c。ConsumeQueryResult() 和 processQueryResult() 函数以前是 src/bin/scripts/common.c 的一部分,现在也移到了那个文件中,成为静态的辅助函数。将来可能需要更改,但目前它们没有用于其他任何地方。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
泛化并行 slot 结果处理。而不是硬编码忽略缺失表并报告所有其他错误的行为,而是通过设置回调函数让调用者决定如何处理。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,我们错误地将其视为另一个反斜杠。并且因为下一个字符是点,我们将其解析为 copy 结束标记,并抛出“copy 结束标记损坏”错误。向所有支持的版本向后移植。审阅者: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 在更多情况下卡住。在存在兄弟链接循环链的情况下,code 仍然不够健壮,尽管尚不清楚这是否真的重要。这是提交 3a01f68e 的后续工作。新的防御性检查依赖于这样的假设:任何给定时间只有一个 VACUUM 操作可以针对某个索引运行。移除一个旧的注释,该注释曾建议需要考虑多个并发 VACUUM。由于我们在其他几个地方也明显依赖于相同的假设,因此该问题现在似乎不太可能具有任何实际有效性。例如,有更新的注释在同一函数中(由 commit efada2b8e92 添加),它们也做出了相同的假设。还在相关 code 路径中添加了 CHECK_FOR_INTERRUPTS()。与 commit 3a01f68e 添加的注释相反,在这里处理中断实际上是可能的,至少在叶级别处理的常见情况下是这样。我们只在叶级别右侧移动时才持有 leafbuf/target 页面的 pin。不向后移植,因为在 commit 3a01f68e 添加到同一区域的 hardening 之后没有收到投诉。 https://git.postgresql.org/pg/commitdiff/c34787f910585f82320f78b0afd53a6a170aa229
为保持一致性而重命名可移除 xid 函数。GlobalVisIsRemovableFullXid() 现在是 GlobalVisCheckRemovableFullXid()。这与处理 TransactionId 值的 FullTransactionId 等效函数的通用约定一致。它现在与附近的 GlobalVisCheckRemovableXid() 函数匹配,后者为使用 TransactionId 值的调用者执行相同的检查。commit 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 交换了补丁,以使 libpq 可以使用 NSS 作为 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 containment operators。
Noah Misch 提交了一个补丁,以修复 KeepFileRestoredFromArchive() 和 restartpoint 之间的竞争。
Peter Eisentraut 提交了一个补丁,以通过添加显示具体数字的详细消息来改进新的 hash 分区边界检查错误消息。
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 提交了另一个补丁版本,以实现 Result Cache 节点并使用它来缓存子计划的结果。
Vigneshwaran C 提交了另一个补丁版本,以使超级用户能够使用新的 pg_print_backtrace() 函数打印指定 postgres 进程的 backtrace。
Peter Eisentraut 提交了一个补丁给 pg_dump,向 dump 函数的 *info 参数添加 const 装饰,以澄清它们不会修改该参数。
Daniel Gustafsson 提交了另一个补丁版本,以支持在运行实例中启用/禁用 checksum。
Peter Smith 提交了一个补丁,旨在修复一个表现为 DROP TABLE 破坏 sync worker relid 的 bug。
Heikki Linnakangas 提交了两个补丁版本,以移除对旧 FE/BE 协议版本 2 的服务器和 libpq 支持,并通过强制前瞻来简化 COPY FROM 解析。
Mark Dilger 提交了两个补丁版本,以实现 pg_amcheck。
Tomáš Vondra 发送了另一个补丁修订版,用于实现 BRIN 多范围索引。
Bharath Rupireddy 提交了另一个补丁给 postgres_fdw,该补丁在 FDW 和全局级别都添加了 keep_connections GUCs,指示不缓存连接。
David Rowley 提交了另一个补丁版本,以实现 tid 扫描,这与现有的 tid 探测不同。
Bertrand Drouvot 提交了另一个补丁修订版,用于在备用服务器上实现最小逻辑解码。
Bruce Momjian 提交了两个补丁版本,旨在修复一个表现为单个检查点中存在多个 full page writes 的 bug。
Amit Langote 提交了另一个补丁版本,以使继承树上的更新和删除能够更好地扩展。
Ronan Dunklau 和 Michaël Paquier 交换了补丁,以在 REINDEX CONCURRENTLY 上保留 attstattarget。
Shenhao Wang、Kyotaro HORIGUCHI 和 Hayato Kuroda 交换了补丁,以修复 ecpg connect 字符串中的解析错误。
Dilip Kumar 提交了三个补丁版本,以提供一个新接口来获取 recovery pause 状态。
Peter Smith 和 Amit Kapila 交换了补丁,以使 pg_replication_origin_drop 对并发 drop 安全。
Amit Langote 提交了另一个补丁版本,以在跨分区更新期间防止 FDW 插入批处理。
Li Japin 提交了另一版补丁,用于实现 ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION。
Stephen Frost 提交了另一个补丁版本,以改进 auto-vacuum 和 auto-analyze 的日志记录。
Jacob Champion 提交了一个补丁来调整 Kerberos 测试。
Dilip Kumar 提交了两个补丁版本,以实现表的自定义压缩方法。
Masahiro Ikeda 提交了另一个补丁版本,以将 WAL write/fsync 统计信息添加到 pg_stat_wal。
Justin Pryzby 提交了另一个补丁版本,以使 CLUSTER 在分区索引上工作。
Heikki Linnakangas 提交了一个补丁,让 psql 的 \copy 以更大的块将数据发送到服务器。
Kazutaka Onishi 提交了两个补丁版本,以普遍实现外表上的 TRUNCATE,特别是在 PostgreSQL FDW 中。
Tom Lane 提交了另一个补丁版本,以修复 postgres_fdw 的 collation 处理。
Pavel Stěhule 提交了另一个补丁版本,以通过返回变量内容的文本值来增强 PL/pgsql 调试 API。
Haiying Tang 提交了一个补丁,以支持 psql 中对大写字符输入的 tab 补全。
Atsushi Torikoshi 提交了另一个补丁版本,以向 pg_stat_statements 添加 plan type。
Takamichi Osumi 提交了两个补丁版本,为 tablesync 工作进程添加测试。
Michaël Paquier 提交了另一个补丁版本,以向 VACUUM 添加 PROCESS_TOAST 选项。