本周人物:https://postgresql.life/post/gunnar_bluth/
pspg 4.0.0 发布,一个专为 PostgreSQL 设计的分页器。https://github.com/okbob/pspg/releases/tag/4.0.0
DBConvert Studio 2.0 发布,一个支持 PostgreSQL 的数据库迁移和同步套件。https://dbconvert.com/dbconvert-studio
https://archives.postgresql.org/pgsql-jobs/2021-01/
PostgreSQL 星球:https://planet.postgresql.org/
本周的 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间/太平洋夏令时间周日下午 3:00 前将新闻和公告提交至 david@fetter.org。
Thomas Munro 推送了
提供 pg_preadv() 和 pg_pwritev()。提供同步向量文件 I/O 例程。它们映射到 preadv() 和 pwritev(),并为没有它们的系统提供回退实现。还提供一个包装器 pg_pwritev_with_retry(),它在短写入时自动重试。由 Tom Lane tgl@sss.pgh.pa.us 审核 由 Andres Freund andres@anarazel.de 审核 讨论:https://postgr.es/m/CA%2BhUKGJA%2Bu-220VONeoREBXJ9P3S94Y7J%2BkqCnTYmahvZJwM%3Dg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/13a021f3e8c99915b3cc0cb2021a948d9c71ff32
使用向量 I/O 填充新的 WAL 段。与其进行多次块大小的 write() 调用以用零填充新的 WAL 文件,不如进行少量的 pwritev() 调用(或各种模拟)。实际数量取决于操作系统的 IOV_MAX,PG_IOV_MAX 当前将其上限设置为 32。这意味着我们在典型的系统上每次调用写入 256kB。我们可能希望在稍后通过更多经验调整这个数字。由 Tom Lane tgl@sss.pgh.pa.us 审核 由 Andres Freund andres@anarazel.de 审核 讨论:https://postgr.es/m/CA%2BhUKGJA%2Bu-220VONeoREBXJ9P3S94Y7J%2BkqCnTYmahvZJwM%3Dg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/ce6a71fa5300cf00adf32c9daee302c523609709
修复 dependency.h 中的函数原型。提交 257836a7 意外删除了函数原型上几个冗余但传统的“extern”关键字。将它们放回去。由 Alvaro Herrera alvherre@alvh.no-ip.org 报告 https://git.postgresql.org/pg/commitdiff/f315205f3fafd6f6c7c479f480289fcf45700310
不要在 src/port/pwrite.c 中使用 elog()。由于这个疏忽,目前没有任何问题,但是如果我们试图在缺乏 pwrite() 的系统上的前端代码中使用 pg_pwrite(),它将无法链接。改为使用断言。同时在这里使用 pgindent。讨论:https://postgr.es/m/CA%2BhUKGL57RvoQsS35TVPnQoPYqbtBixsdRhynB8NpcUKpHTTtg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/df10ac625c1672edf839ff59cfcac9dcc097515c
将我们的 p{read,write}v 替换移动到它们自己的文件中。macOS 的 ranlib 在之前的安排中发布了一条关于空 pread.o 文件的警告,在新的足以不需要替换函数的系统上。让我们回到使用 configure 的 AC_REPLACE_FUNCS 系统,仅在需要时才构建并将每个 .o 包含在库中,这需要将 *v() 函数移动到它们自己的文件中。还将 _with_retry() 包装器移动到一个更永久的位置。由 Tom Lane tgl@sss.pgh.pa.us 报告 讨论:https://postgr.es/m/1283127.1610554395%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0d56acfbaa799553c0c6ea350fd6e68d81025994
针对新的 iovec 代码进行小幅头文件清理。删除冗余函数声明并改进 pg_iovec.h 中的头文件注释。将 fd.h 中的新声明移动到一组更相似的函数旁边。https://git.postgresql.org/pg/commitdiff/fb29ab26b38f1647423bf6aa2991e5fdf9060f08
Tom Lane 推送了
在 libpq 中,始终将新的错误消息附加到 conn->errorMessage。以前,我们在 libpq 中使用 printfPQExpBuffer 和 appendPQExpBuffer 调用的不规则混合来报告错误。此提交建立了一个统一规则,即应使用 appendPQExpBuffer[Str]。conn->errorMessage 仅在应用程序请求开始时重置,然后累积消息直到完成。我们可以删除不少于三种不同的临时机制,这些机制用于在操作序列中获得错误消息的连接效果。虽然这使得概念上更清晰一些,但这样做主要的原因是为了使添加后的一段时间的多个目标主机功能更加安全。以前,在单个主机连接尝试期间发生的错误会清除先前尝试期间发生的事情的记录。 (报告仍然不足,因为它很难分辨哪个主机发生了故障,但这似乎是单独提交的问题。)目前,lo_import 和 lo_export 包含“永远不要使用 printfPQExpBuffer”规则的例外。如果我们更改它们,我们可能会在实际的读取或写入失败之前报告偶然的 lo_close 失败,这将令人困惑,尤其是在主失败之后发生了 lo_close。我们可以通过发明一个不重置 errorMessage 的 lo_close 内部版本来改进这一点;但是我们还需要一个执行此操作的 PQfn() 版本,而且现在看起来不太值得麻烦。讨论:https://postgr.es/m/BN6PR05MB3492948E4FD76C156E747E8BC9160@BN6PR05MB3492.namprd05.prod.outlook.com https://git.postgresql.org/pg/commitdiff/ffa2e4670123124b92f037d335a1e844c3782d3f
允许 pg_regress.c 包装器后处理测试结果文件。向 regression_main() 添加一个可选的回调,如果提供,则在我们将每个测试输出文件与其预期结果文件进行比较之前,将调用该回调。主程序和隔离测试程序(目前)不需要此功能。在 pg_regress_ecpg 中,添加一个过滤器,该过滤器从“无法连接”的错误报告中消除目标主机详细信息。此过滤器在此提交时尚未执行任何操作,但下一个提交需要它。从长远来看,我们可能希望为测试输出提供一些更通用的、可能基于模式的过滤机制。目前,这将解决当前的问题。讨论:https://postgr.es/m/BN6PR05MB3492948E4FD76C156E747E8BC9160@BN6PR05MB3492.namprd05.prod.outlook.com https://git.postgresql.org/pg/commitdiff/800d93f314b0f7c10193e48b259f87800cb85d84
在 libpq 连接失败报告中统一标识目标主机。将“无法连接到主机或套接字路径:”前缀添加到 socket() 调用后发生的所有连接失败情况,并删除附加到其中一些消息的临时服务器标识数据。这应该在多目标主机情况下产生更易于理解的错误报告,尤其是在任何程度的偏离常规的错误情况下(因为这些都没有提供任何服务器标识信息)。作为更改的一个示例,以前,使用错误的端口号(例如“psql -p 12345 -h localhost,/tmp”)的连接尝试可能会产生 psql:错误:无法连接到服务器:连接被拒绝 服务器是否在主机“localhost”(::1)上运行并接受端口 12345 上的 TCP/IP 连接?无法连接到服务器:连接被拒绝 服务器是否在主机“localhost”(127.0.0.1)上运行并接受端口 12345 上的 TCP/IP 连接?无法连接到服务器:没有这样的文件或目录 服务器是否在本地运行并接受 Unix 域套接字“/tmp/.s.PGSQL.12345”上的连接?现在看起来像 psql:错误:无法连接到主机“localhost”(::1),端口 12345:连接被拒绝 服务器是否在该主机上运行并接受 TCP/IP 连接?无法连接到主机“localhost”(127.0.0.1),端口 12345:连接被拒绝 服务器是否在该主机上运行并接受 TCP/IP 连接?无法连接到套接字“/tmp/.s.PGSQL.12345”:没有这样的文件或目录 服务器是否在本地运行并接受该套接字上的连接?这需要调整几个回归测试,以允许连接失败消息的内容发生变化。讨论:https://postgr.es/m/BN6PR05MB3492948E4FD76C156E747E8BC9160@BN6PR05MB3492.namprd05.prod.outlook.com https://git.postgresql.org/pg/commitdiff/52a10224e3cc1d706ba9800695f97cb163b747d5
在“现在无法连接”失败后尝试下一个主机。如果服务器返回 ERRCODE_CANNOT_CONNECT_NOW,则尝试下一个主机(如果已提供多个主机名)。这允许优雅地处理可能尚未处于热备模式的备用服务器。在前面提交之后,重试我们现在执行的许多错误情况可能是合理的,但我(tgl)不愿对此过于激进——例如,对于密码错误的情况,不清楚它是否可取。但是这种情况看起来足够安全。Hubert Zhang,由 Takayuki Tsunakawa 审核 讨论:https://postgr.es/m/BN6PR05MB3492948E4FD76C156E747E8BC9160@BN6PR05MB3492.namprd05.prod.outlook.com https://git.postgresql.org/pg/commitdiff/c1d589571c497a952d7fbe40d9828655859d746f
重新考虑 ERRCODE_IDLE_SESSION_TIMEOUT 的 SQLSTATE 代码。将其移动到 57 类(操作员干预),鉴于从客户端的角度来看,它的行为很像 ERRCODE_ADMIN_SHUTDOWN,因此这似乎是更好的选择。在全新的领域中,我也会将 ERRCODE_IDLE_IN_TRANSACTION_SESSION_TIMEOUT 放在这里。但是这种情况已经存在了好几年,所以现在可能为时已晚,无法更改其 SQLSTATE 代码。讨论:https://postgr.es/m/763A0689-F189-459E-946F-F0EC4458980B@hotmail.com https://git.postgresql.org/pg/commitdiff/4edf96846a02693e4416478b3302e5133d2e8e01
使 pg_dump 的对象类型优先级表更易于维护。历史上,向此表中楔入新的对象类型需要手动重新编号许多现有条目。(尽管看起来有些人偷懒,重复使用了现有对象类型的优先级级别,即使它们之间没有特别的关联。)我们可以让编译器通过创建一个枚举类型来完成计数,该枚举类型按顺序列出所需的优先级级别。现在,如果您想添加或删除优先级级别,只需要一行代码即可。此补丁并非纯粹是表面上的修改,因为我拆分了 DO_COLLATION 和 DO_TRANSFORM 的优先级,以及 DO_ACCESS_METHOD 和 DO_OPERATOR 的优先级,在我看来,它们是为了方便而合并在一起的,而不是因为这是一个好主意。Shell 类型继续与完整类型交替排序,操作符类与操作符族交替排序。https://git.postgresql.org/pg/commitdiff/d5ab79d815783fe60062cefc423b54e82fbb92ff
将 ALTER TABLE ... ATTACH PARTITION 作为单独的 ArchiveEntry 转储。之前,我们将 ATTACH PARTITION 命令作为子表的 ArchiveEntry 的一部分发出。这是一个糟糕的选择,因为它使得将分区还原为独立表变得复杂;您必须忽略来自 ATTACH 的错误,当使用 pg_restore 直接还原到数据库时,这甚至不是一个选项。(pg_restore 将整个 ArchiveEntry 作为一次 PQexec 发出,因此任何错误都会回滚表的创建。)因此,将其作为自己的 ArchiveEntry 分开,就像我们对索引 ATTACH PARTITION 命令所做的那样。Justin Pryzby 讨论:https://postgr.es/m/20201023052940.GE9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/9a4c0e36fbd671b5e7426a5a0670bdd7ba2714a0
文档:修复 ALTER PUBLICATION 所需权限的描述。向发布中添加表需要拥有该表的所有权(除了拥有该发布的所有权之外)。这一点在任何地方都没有提及。https://git.postgresql.org/pg/commitdiff/cc865c0f319fde22540625e02863f42e9853b3e4
pg_dump:使用所有者标记 INDEX ATTACH ArchiveEntries。尽管分区索引与其父级的连接没有单独的所有权,但其 ArchiveEntry 仍然需要标记所有者,以确保在使用 --use-set-session-authorization 还原时,ALTER 命令由适当的角色运行。如果没有这个,ALTER 将由启动还原会话的角色运行,这通常可以工作,但形式上是不正确的。回溯到添加此类型 ArchiveEntry 的 v11。在 HEAD 中,为刚刚添加的 TABLE ATTACH 情况添加等效的注释,我已经使其执行了正确的操作。讨论:https://postgr.es/m/1094034.1610418498@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9eabfe300a22ad3d776dc293265e15379790bd9a
文档:阐明 pg_dump 中后半部分选项的行为。当转储为归档格式时,更改如何将归档数据转换为 SQL 文本的选项将被忽略。文档之前说“没有意义”,这没有帮助。讨论:https://postgr.es/m/161052021249.12228.9598689907884726185@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/06ed235adeb621a73cafd6ab35fa2405b3177329
禁止在 pgbench 中使用数字作为变量名的第一个字符。此限制的目的是避免尝试将变量替换为时间戳文字值,时间戳文字值可能包含诸如“12:34”之类的字符串。为了减少 pgbench 在不应该替换的地方进行替换的倾向,还需要做更多的工作。但这足以解决 Jaime Soler 抱怨的情况,而且足够简单可以回溯。回溯到 v11;在提交 9d36a3866 之前,pgbench 对变量名的定义略有不同,无论如何,为此更改长期稳定的分支似乎是不明智的。Fabien Coelho 讨论:https://postgr.es/m/alpine.DEB.2.22.394.2006291740420.805678@pseudo https://git.postgresql.org/pg/commitdiff/c21ea4d53e9404279273da800daa49b7b9a5e81e
文档,或多或少:取消注释很久以前修复的教程示例。恢复提交 344190b7e 的一部分。显然,在 20 世纪,我们有一些关于多语句 SQL 函数的问题,但它们已经正常工作了很长时间。Daniel Westermann 讨论:https://postgr.es/m/GVAP278MB04242DCBF5E31F528D53FA18D2A90@GVAP278MB0424.CHEP278.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/dce62490818170b6479dfe08a28aae4bcdf7cc2d
运行 reformat-dat-files 来整理目录数据文件。这里的事情变得非常混乱,显然主要是但不完全是 multirange 补丁的错。没有功能更改。https://git.postgresql.org/pg/commitdiff/8b411b8ff41566a1aa601d1f05aeebbebbdb4a54
将 inet_server_addr() 和 inet_server_port() 标记为并行限制的。这些需要是 PR,因为它们访问 MyProcPort 数据结构,该数据结构不会复制到并行工作进程。非常相似的函数 inet_client_addr() 和 inet_client_port() 已经标记为 PR,但有人错过了这些函数。尽管这是一个预先存在的错误,但我们无法在回溯分支中轻松修复它,因为我们无法强制 initdb。考虑到这两个函数的少量使用,以及它们无论如何都更不可能被推送到并行工作进程的情况,建议 DBA 手动修复似乎不值得麻烦。Masahiko Sawada 讨论:https://postgr.es/m/CAD21AoAT4aHP0Uxq91qpD7NL009tnUYQe-b14R3MnSVOjtE71g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/5a6f9bce8dabd371bdb4e3db5dda436f7f0a680f
pg_dump:使用所有者标记 PUBLICATION TABLE ArchiveEntries。这与应用于 INDEX ATTACH 条目的提交 9eabfe300 的修复相同,但适用于表到发布的连接。与该情况一样,即使后端不记录连接的“所有权”,我们仍然应该在转储归档文件中使用应该运行 ALTER PUBLICATION 命令的角色名称来标记它。现有行为导致 ALTER 由启动还原的原始角色完成;这通常可以正常工作,但可能存在失败的极端情况。此补丁的大部分内容涉及更改 struct PublicationRelInfo 以包含指向关联的 PublicationInfo 对象的指针,以便我们可以在时机成熟时从中获取所有者的名称。同时,我重写了 getPublicationTables(),使其只查询一次 pg_publication_rel,而不是每个表查询一次。回溯到引入此代码的 v10。讨论:https://postgr.es/m/1165710.1610473242@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/8e396a773b80c72e5d5a0ca9755dffe043c97a05
改进我们在 macOS 上选择 PG_SYSROOT 的启发式方法。在 Xcode 比底层 macOS 版本更新的情况下,向 xcodebuild 询问 SDK 路径会生成指向 Xcode 随附的 SDK 的指针,这最终可能会构建在底层 macOS 版本上不起作用的代码。似乎在这种情况下,xcodebuild 的答案也与 Apple 编译器的默认行为不匹配:假设已经安装了 Xcode 的“命令行工具”,则在 /Library/Developer/CommandLineTools 中将有一个用于操作系统自身版本的 SDK,并且编译器将默认使用该 SDK。所有这些都没有很好的文档记录,但实验表明,“xcrun --show-sdk-path”给出了编译器实际使用的 sysroot 路径,至少在某些情况下是这样。因此,首先尝试使用该命令,如果 xcrun 失败(在非常旧的 Xcode 中,它缺少或缺少 --show-sdk-path 开关),则恢复为 xcodebuild。此外,“xcrun --show-sdk-path”可能会给出有效的路径,但缺少任何操作系统版本标识符。我们并不真正想要那样,因为将 -isysroot 连接到构建标志的主要动机是确保 PG 安装的所有部分都针对同一个 SDK 构建,即使考虑到以后构建的和/或在不同计算机上构建的扩展也是如此。在接受结果之前,坚持在目录名称中找到“N.N”。(将“--sdk macosx”添加到 xcrun 调用似乎会产生与 xcodebuild 相同的答案,但通常更快,因为它已被缓存,因此我们也尝试将其作为回退。)在这种情况下,我们不想使用 Xcode 的默认 SDK 的核心原因是 Apple 用于引入新系统调用的技术与 Autoconf 不兼容:例如,当使用 Big Sur SDK 时,configure 会认为 preadv/pwritev 存在,即使在构建它们的较旧的 macOS 版本中不存在也是如此。最好有一个更好的解决方案来解决这个问题,但此补丁没有尝试修复它。根据 Sergey Shinderuk 的报告。回溯到所有受支持的版本。讨论:https://postgr.es/m/ed3b8e5d-0da8-6ebd-fd1c-e0ac80a4b204@postgrespro.ru https://git.postgresql.org/pg/commitdiff/4823621db312a0597c40686c4c94d47428889fef
将缺失的数组扩容逻辑添加到 test_regex.c。报告“部分”匹配的节可能会超出最初分配的输出数组,因此它需要自己复制主循环中的数组调整大小逻辑。我在 ca8217c10 中忽略了这一需求。根据 Alexander Lakhin 的报告。讨论:https://postgr.es/m/3206aace-50db-e02a-bbea-76d5cdaa2cb6@gmail.com https://git.postgresql.org/pg/commitdiff/0c7d3bb99f72d66ec6ac63aee4c5fe6d683eee86
Amit Kapila 推送
优化恢复时的 DropRelFileNodeBuffers()。优化了 DropRelFileNodeBuffers() 的恢复路径,以便当关系中要截断的块数低于某个阈值时,可以避免扫描整个缓冲区池。对于这种情况,我们通过在 BufMapping 表中进行查找来找到缓冲区。在许多情况下,当截断多个小表(使用 1000 个关系进行测试)并且服务器配置了较大的共享缓冲区值(大于等于 100GB)时,这可以将性能提高 100 倍以上。此优化有助于以下情况:(a)当 vacuum 或 autovacuum 截断了关系末尾的任何空页面时;或者(b)当关系在创建它的同一事务中被截断时。此提交引入了一个新的 API smgrnblocks_cached,它返回关系 fork 中块数的缓存值。这有助于我们确定应用此优化所需的关系的确切大小。需要确切的大小以确保我们不会为被删除的关系留下任何缓冲区,否则后台写入器或检查点写入器可能会在刷新与不存在的文件对应的缓冲区时导致 PANIC 错误。作者:Kirk Jamison,基于 Amit Kapila 的想法 审核人:Kyotaro Horiguchi、Takayuki Tsunakawa 和 Amit Kapila 测试人:Haiying Tang 讨论:https://postgr.es/m/OSBPR01MB3207DCA7EC725FDD661B3EDAEF660@OSBPR01MB3207.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/d6ad34f3410f101f9909c0918a49d6ce86fa216c
修复关系描述符泄漏。我们在逻辑复制期间通过分区关系的根发送更改时,错过了关闭关系描述符。作者:Amit Langote 和 Mark Zhao 审核人:Amit Kapila 和 Ashutosh Bapat 回溯到:13,在该版本中引入了此问题。讨论:https://postgr.es/m/tencent_41FEA657C206F19AB4F406BE9252A0F69C06@qq.com 讨论:https://postgr.es/m/tencent_6E296D2F7D70AFC90D83353B69187C3AA507@qq.com https://git.postgresql.org/pg/commitdiff/044aa9e70e552d9adb4f6429a1b0e96dde946a92
优化 DropRelFileNodesAllBuffers() 以用于恢复。类似于提交 d6ad34f341,此补丁通过避免完整的缓冲区池扫描来优化 DropRelFileNodesAllBuffers(),而是通过在 BufMapping 表中查找来找到要失效的缓冲区。此优化有助于需要删除关系文件的操作,例如 Truncate、Drop、Abort of Create Table 等。作者:Kirk Jamison 审核人:Kyotaro Horiguchi、Takayuki Tsunakawa 和 Amit Kapila 测试人:Haiying Tang 讨论:https://postgr.es/m/OSBPR01MB3207DCA7EC725FDD661B3EDAEF660@OSBPR01MB3207.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/bea449c635c0e68e21610593594c1e5d52842cdd
修复 SnapBuildSerialize 中的内存泄漏。在逻辑解码期间,将快照序列化到磁盘时,快照的内存泄漏。此内存仅在 walsender 停止流式传输更改后才会释放。当主服务器过于频繁地记录备用快照时(例如,当用户尝试创建许多复制槽时),这可能会导致内存大量增加。报告人:funnyxj.fxj@alibaba-inc.com 诊断人:funnyxj.fxj@alibaba-inc.com 作者:Amit Kapila 向后移植到:9.5 讨论:https://postgr.es/m/033ab54c-6393-42ee-8ec9-2b399b5d8cde.funnyxj.fxj@alibaba-inc.com https://git.postgresql.org/pg/commitdiff/ee1b38f65948cb09ecf3c39b58bd88aabc950e7c
删除 fetch_table_list 中不必要的 pstrdup。TextDatumGetCString 的结果已经 palloc'ed,因此我们不需要再次为其分配内存。我们决定不向后移植它,因为它似乎没有任何情况下会产生有意义的泄漏。作者:Zhijie Hou 审核人:Daniel Gustafsson 讨论:https://postgr.es/m/229fed2eb8c54c71a96ccb99e516eb12@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/c95765f47673b16ed36acbfe98e1242e3c3822a3
Álvaro Herrera 推送了
修复注释中的笔误。此注释自 2c03216d8311 提交引入以来一直是错误的。作者:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/CAD21AoAzz6qipFJBbGEaHmyWxvvNDp8httbwLR9tUQWaTjUs2Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a3e51a36b77ab073df88860cc21b2a6094d699d4
创建结构体 ReindexIndexInfo。此结构体供 ReindexRelationConcurrently 用于跟踪要处理的关系。这节省了重复获取某些数据的麻烦,并且在未来也有用途。审核人:Dmitry Dolgov 9erthalion6@gmail.com 审核人:Hamid Akhtar hamid.akhtar@gmail.com 审核人:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/20201130195439.GA24598@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/c6c4b37395b22f7e649234453a0aafe74d61b7e6
在 create index 文档中指出 vacuum 的注意事项。向后移植到 pg12,这在没有冲突的情况下是可行的。作者:James Coleman jtc331@gmail.com 审核人:"David G. Johnston" david.g.johnston@gmail.com 讨论:https://postgr.es/m/CAAaqYe9oEfbz7AxXq7OX+FFVi5w5p1e_Of8ON8ZnKO9QqBfmjg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/93c39f987e9c019cd28c450ece8a621b2d8ce28a
防止删除分区关系使用的表空间。当表空间在分区关系中使用时(根据 pg12 中表 的 ca4103025dfe 提交和 pg11 中索引 的 33e6c34c3267 提交),有可能删除表空间,从而可能导致各种问题。其中一个问题在 bug #16577 中报告,其中重写的 ALTER TABLE 导致服务器崩溃。通过使用 pg_shdepend 来跟踪不保留物理文件的关系使用的表空间来防止这种情况;如果发现任何分区关系引用了表空间,我们现在会中止表空间。将其向后移植到 11,这个问题一直潜伏在那里。我们不尝试为现有的分区索引/表创建 pg_shdepend 条目,但是任何修改过的条目都将受到保护。注意行为的细微变化:当尝试删除同时包含常规表和分区表的表空间时,您之前会收到 ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE,现在您会收到 ERRCODE_DEPENDENT_OBJECTS_STILL_EXIST。可以说,后者更正确。可以通过以下方式为现有表/索引添加保护 pg_shdepend 条目:对不在数据库默认表空间中的每个分区表/索引执行 ALTER TABLE ONLY some_partitioned_table SET TABLESPACE pg_default; ALTER TABLE ONLY some_partitioned_table SET TABLESPACE original_tablespace; 因为这些分区对象没有存储,因此不需要实际移动任何文件,因此它所花费的时间不应该比获取锁所需的时间多。此查询可用于搜索此类关系:SELECT ... FROM pg_class WHERE relkind IN ('p', 'I') AND reltablespace <> 0 报告人:Alexander Lakhin exclusion@gmail.com 讨论:https://postgr.es/m/16577-881633a9f9894fd5@postgresql.org 作者:Álvaro Herrera alvherre@alvh.no-ip.org 审核人:Michael Paquier michael@paquier.xyz https://git.postgresql.org/pg/commitdiff/ebfe2dbd6b624e2a428e14b7ee9322cc096f63f7
避免并发重新索引中的虚假等待。这类似于提交 c98763bf51bf,但用于 REINDEX CONCURRENTLY。也就是说:此标志指示当前进程在等待其他快照时可以忽略不计,当执行 CREATE INDEX CONCURRENTLY 和 REINDEX CONCURRENTLY 时。这有助于两个执行这些操作的进程不发生死锁,并且还避免了虚假的等待。作者:Álvaro Herrera alvherre@alvh.no-ip.org 审核人:Dmitry Dolgov 9erthalion6@gmail.com 审核人:Hamid Akhtar hamid.akhtar@gmail.com 审核人:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/20201130195439.GA24598@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/f9900df5f94936067e6fa24a9df609863eb08da2
Michaël Paquier 推送了
修复 catcache.c 的注释中的例程名称。作者:Bharath Rupireddy 讨论:https://postgr.es/m/CALj2ACUDXLAkf_XxQO9tAUtnTNGi3Lmd8fANd+vBJbcHn1HoWA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/fce7d0e6efbef304e81846c75eddf73099628d10
重构十六进制和编码例程。此提交解决了 c3826f83 的一些问题,该提交将十六进制解码例程移至 src/common/: - 解码函数缺少溢出检查,因此当用于与安全性相关的功能时,如果未仔细使用,则会导致超出范围写入的漏洞,并且可能仍然未被检测到。与 src/common/ 中 SCRAM 已使用的 base64 例程类似,此例程经过重新设计,通过将目标缓冲区的大小作为参数传递来检查溢出,并在进行任何写入之前检查溢出。 - 缺少编码例程。将其移至 src/common/,并获得了与解码部分相同的溢出检查。如果失败,src/common/ 的十六进制例程会根据为使前端工具而不是共享库使用它们而进行的讨论发出错误。请注意,这就是为什么 ECPG 没有包含在此提交中的原因,它仍然包含重复的逻辑来执行十六进制编码和解码。在此基础上,此提交在 encode.c 中为现有的 escape 和 base64 例程中的源缓冲区和目标缓冲区使用了更好的变量名称,并使其对于溢出检测更加健壮。如果通过 SQL 函数,之前的核心代码会在执行超出范围的写入后发出 FATAL,这足以在处理影响代码这一区域的更改时检测到问题。相反,在执行超出范围的写入之前会发出错误。十六进制例程被直接调用来进行 bytea 转换和备份清单,而没有此类健全性检查。当前的调用恰好没有任何问题,但是粗心使用此类 API 很容易导致 CVE 级别的错误。作者:Bruce Momjian,Michael Paquier 审核人:Sehrope Sarkuni 讨论:https://postgr.es/m/20201231003557.GB22199@momjian.us https://git.postgresql.org/pg/commitdiff/aef8948f38d9f3aa58bf8c2d4c6f62a7a456a9d1
修复回收 WAL 段时 O(N^2) 的 stat() 调用。跟踪回收的最后一个段号的计数器在回收单个段时被初始化,而它应该在回收的完整段周期中被使用,以防止对已经回收的条目进行无用的检查。此性能问题是由 b2a5545 引入的,它最初在 61b86142 中实现。由于缺乏字段投诉,因此不进行向后移植。报告人:Andres Freund, Thomas Munro 作者:Michael Paquier 审核人:Andres Freund 讨论:https://postgr.es/m/20170621211016.eln6cxxp3jrv7m4m@alap3.anarazel.de 讨论:https://postgr.es/m/CA+hUKG+DRiF9z1_MU4fWq+RfJMxP7zjoptfcmuCFPeO4JM2iVg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/5ae1572993ae8bf1f6c33a933915c07cc9bc0add
从 sha2.h 中删除 PG_SHA*_DIGEST_STRING_LENGTH。这些变量的最后一个引用已在 aef8948 中删除,因此这稍微清理了代码。讨论:https://postgr.es/m/X//ggAqmTtt+3t7X@paquier.xyz https://git.postgresql.org/pg/commitdiff/ccf4e277a4de120a2f08db7e45399d87e1176bda
Heikki Linnakangas 推送了
向“pageinspect”添加函数以检查 GiST 索引。作者:Andrey Borodin 和我 讨论:https://postgresql.ac.cn/message-id/3E4F9093-A1B5-4DF8-A292-0B48692E3954%40yandex-team.ru https://git.postgresql.org/pg/commitdiff/756ab29124d7850d4392e2227b67b69b61576cd6
修复新 gist pageinspect 测试中的可移植性问题。1. 测试中使用的点类型键的原始 bytea 表示形式取决于字节序。从测试中删除原始 key_data 列。2. 存储在非最左侧 gist 页上的项取决于其他页上存储的项数。这在 32 位 i386 系统上显示为失败。为了修复此问题,仅在最左侧的叶页上测试 gist_page_items() 函数。根据 Andrey Borodin 和 buildfarm。讨论:https://postgresql.ac.cn/message-id/9FCEC1DC-86FB-4A57-88EF-DD13663B36AF%40yandex-team.ru https://git.postgresql.org/pg/commitdiff/6ecaaf810b8b9e3132f00549e630400f38a7ca37
修复 wal_level=minimal 下的测试失败。新添加的 gist pageinspect 测试会打印 GiST 页面的 LSN,预期它们都为 1 (GistBuildLSN)。但是当 wal_level=minimal 时,它们会在提交时被整个关系的 WAL 日志更新。通过将有问题的测试用 CREATE INDEX 封装在同一个事务中来修复。根据 thorntail 上的 buildfarm 失败。讨论:https://postgresql.ac.cn/message-id/3B4F97E5-40FB-4142-8CAA-B301CDFBF982%40iki.fi https://git.postgresql.org/pg/commitdiff/5abca4b1cd7193d6a5c8235c97eb240312190bcb
Magnus Hagander 推送了此提交
移除不正确的标记。看起来 737d69ffc3c 进行了复制/粘贴或自动化错误,导致了两个额外的右括号。报告者:Michael Vastola。向后移植到:13。讨论:https://postgr.es/m/161051035421.12224.1741822783166533529@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/e6eeb8d799c703eb829612ddcb4fd5ba82d3e880
为会话和会话时间添加 pg_stat_database 计数器。此提交向 pg_stat_database 添加了会话数量、不同类型的会话终止类型以及数据库中活动与空闲时间计时器的计数器。内部上,此提交还将参数“force”重命名为 disconnect。这是之前该参数的唯一用例,因此将其重新用于更窄的用例比发明新的东西更清晰。作者:Laurenz Albe。审阅者:Magnus Hagander、Soumyadeep Chakraborty、Masahiro Ikeda。讨论:https://postgr.es/m/b07e1f9953701b90c66ed368656f2aef40cac4fb.camel@cybertec.at https://git.postgresql.org/pg/commitdiff/960869da0803427d14335bba24393f414b476e2c
向 initdb 添加 --no-instructions 参数。指定此参数会删除有关如何启动服务器的信息性消息。这是为了在不同打包系统的包装器中使用,在这些系统中,这些指令很可能不正确,但 initdb 的其他输出仍然有用(因此将所有内容重定向到 /dev/null 是不好的)。作者:Magnus Hagander。审阅者:Peter Eisentraut。讨论:https://postgr.es/m/CABUevEzo4t5bmTXF0_B9WzmuWpVbMpkNZZiGvzV8NZa-=fPqeQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e09155bd62f0ac5817cb3d736eb35adf4200549e
添加有关校验和的文档章节。数据校验和在文档中没有更长的讨论,此提交添加了一个简短的概述部分。从更大的在线启用校验和的补丁中提取,该补丁有更多的作者和审阅者。作者:Daniel Gustafsson。审阅者:Magnus Hagander、Michael Banck(以及通过大型补丁的其他人员)。讨论:https://postgr.es/m/5ff49fa4.1c69fb81.658f3.04ac@mx.google.com https://git.postgresql.org/pg/commitdiff/cf621d9d84db1e6edaff8ffa26bad93fdce5f830
Fujii Masao 推送了此提交
在恢复冲突解决时记录长时间的等待时间。这是提交 0650ff2303 中完成工作的后续。此提交扩展了 log_recovery_conflict_waits,以便在 deadlock_timeout 传递后恢复冲突已解决时,也会生成日志消息,即当启动进程在 deadlock_timeout 后完成等待恢复冲突时。这对于调查恢复冲突阻止 WAL 应用的时间很有用。作者:Fujii Masao。审阅者:Kyotaro Horiguchi、Bertrand Drouvot。讨论:https://postgr.es/m/9a60178c-a853-1440-2cdc-c3af916cff59@amazon.com https://git.postgresql.org/pg/commitdiff/39b03690b529935a3c33024ee68f08e2d347cf4f
确保备用服务器能够跟随较新时间线上的主服务器。提交 709d003fbd 重构了 WAL 读取代码,但意外导致 WalSndSegmentOpen() 在从历史时间线读取时无法跟随时间线切换。当启用 WAL 归档时,此问题导致备用服务器无法跟随较新时间线上的主服务器。如果段内存在时间线切换,WalSndSegmentOpen() 应该从属于新时间线的 WAL 段读取。但以前由于未能跟随时间线切换,它尝试读取旧时间线的 WAL 段。当启用 WAL 归档时,旧时间线的 WAL 段不存在,因为它已重命名为 .partial。这导致主服务器尝试读取不存在的 WAL 段,并导致复制失败,错误为“ERROR: requested WAL segment ... has already been removed”。此提交修复了 WalSndSegmentOpen(),使其能够跟随时间线切换,以确保即使启用了 WAL 归档,备用服务器也能够跟随较新时间线上的主服务器。此提交还添加了回归测试,以检查当启用 WAL 归档时,备用服务器是否能够跟随较新时间线上的主服务器。向后移植到引入此错误的 v13 版本。报告者:Kyotaro Horiguchi。作者:Kyotaro Horiguchi,由 Fujii Masao 调整。审阅者:Alvaro Herrera、Fujii Masao。讨论:https://postgr.es/m/20201209.174314.282492377848029776.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/fef5b47f6bfc9bfec619bb2e6e66b027e7ff21a3
改进 CLOSE、DECLARE、FETCH 和 MOVE 的 Tab 补全。此提交使 CLOSE、FETCH 和 MOVE 命令能够 Tab 补全游标列表。此外,此提交使 DECLARE 命令能够 Tab 补全选项。作者:Shinya Kato、Sawada Masahiko,由 Fujii Masao 调整。审阅者:Shinya Kato、Sawada Masahiko、Fujii Masao。讨论:https://postgr.es/m/b0e4c5c53ef84c5395524f5056fc71f0@MP-MSGSS-MBX001.msg.nttdata.co.jp https://git.postgresql.org/pg/commitdiff/3f238b882c276a59f5d98224850e5aee2a3fec8c
稳定时间线切换回归测试。提交 fef5b47f6b 添加了回归测试,以检查当启用 WAL 归档时,备用服务器是否能够跟随较新时间线上的主服务器。但是 buildfarm 成员 florican 报告说,此测试失败,因为请求的 WAL 段已被删除,并且复制失败。这是一个时序问题。由于测试中既未使用复制槽,也未设置 wal_keep_size,因此检查点可能会删除仍然需要用于复制的 WAL 段。此提交通过设置 wal_keep_size 来稳定测试。向后移植到添加此提交稳定化的回归测试的 v13 版本。作者:Fujii Masao。讨论:https://postgr.es/m/X//PsenxcC50jDzX@paquier.xyz https://git.postgresql.org/pg/commitdiff/424d7a9b277c0da5ec638bf6344cda899a2e544a
postgres_fdw: 将外部服务器 OID 保存在连接缓存条目中。连接缓存条目中存储的外部服务器 OID 用作查找键,以直接获取服务器名称。之前,由于连接缓存条目没有服务器 OID,postgres_fdw 必须首先从用户映射获取服务器 OID,然后再获取服务器名称。因此,如果相应的用户映射被删除,postgres_fdw 可能会在查找用户映射时引发错误“cache lookup failed for user mapping”,并且即使服务器尚未删除,也无法获取服务器名称。作者:Bharath Rupireddy。审阅者:Fujii Masao。讨论:https://postgr.es/m/CALj2ACVRZPUB7ZwqLn-6DY8C_UmPs6084gSpHA92YBv++1AJXA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/5e5f4fcd89c082bba0239e8db1552834b4905c34
修复计算存储 TOC 所需的共享内存量。提交 ac883ac453 重构了 shm_toc_estimate(),但错误地更改了其对 TOC 共享内存大小的计算。之前这可能会导致分配的内存过大。向后移植到引入此错误的 v11 版本。作者:Takayuki Tsunakawa。讨论:https://postgr.es/m/TYAPR01MB2990BFB73170E2C4921E2C4DFEA80@TYAPR01MB2990.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/2ad78a87f018260d4474eee63187e1cc73c9b976
Peter Geoghegan 推送了此提交
传递“逻辑上未更改的索引”提示。添加一个执行器 aminsert() 提示机制,通知索引 AMs,传入的索引元组(伴随提示的元组)不是通过执行逻辑上修改索引任何键列的 SQL 语句插入的。当发生 UPDATE 且未应用堆 AM 的 HOT 之类的优化时(尽管仅适用于所有键列在逻辑上都未更改的索引),索引会收到提示。任何在插入时收到提示的索引元组都应至少是同一逻辑行所需的至少一个现有旧版本的重复项。相关的版本通常会存储在同一个索引页上,至少在应用提示的索引 AM 中是这样。在索引 AM 级别识别 MVCC 版本搅动重复项和真实的逻辑行重复项之间的差异,可以帮助清理垃圾索引元组。清理可以智能地定位可能是垃圾的元组,而不会在不太有希望的元组/页面上浪费太多周期(很少或没有版本搅动的索引页)。这是即将推出的提交的基础设施,该提交将教会 nbtree 执行自底向上的索引删除。目前,没有任何索引 AM 实际应用提示。作者:Peter Geoghegan pg@bowt.ie。审阅者:Victor Yegorov vyegorov@gmail.com。讨论:https://postgr.es/m/CAH2-Wz=CEKFa74EScx_hFVshCOn6AA5T-ajFASTdzipdkLTNQQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9dc718bdf2b1a574481a45624d42b674332e2903
增强 nbtree 索引元组删除功能。使 nbtree 和堆访问方法(heapam)能够协同工作,以便主动删除代表已失效 MVCC 版本的重复元组。这被称为“自底向上删除”。每次自底向上删除操作都是在 nbtree 叶子页上出现大量版本时被懒加载触发的。这通常涉及到“逻辑上未更改的索引”提示(这些提示是由 commit 9dc718bd 添加的执行器机制生成的)。自底向上索引删除的直接目标是避免完全由版本重复引起的“不必要”的页面分割。不过,它自然而然地会产生更有用的效果:它可以防止任何给定的逻辑行累积过多索引元组版本。自底向上索引删除是对我们现在可能称之为“自顶向下索引删除”的补充:即由 VACUUM 执行的索引清理。自底向上索引删除响应查询的直接局部需求,同时将索引的非频繁全面清理交给自动清理进程(autovacuum)。总体效果是避免与 UPDATE 引起的“版本动荡”相关的某些病态性能问题。索引访问方法(AM)先前用于执行元组删除的 tableam 接口(table_compute_xid_horizon_for_tuples() 函数)已被支持某些新要求的新接口所取代。此提交添加到 nbtree 的许多(可能所有)功能也可以扩展到其他索引 AM。这留待以后的提交完成。通过添加逻辑来考虑在传递中删除额外的索引元组(这些元组未标记为 LP_DEAD),从而扩展 nbtree 中 LP_DEAD 标记索引元组的删除。这在许多情况下显着增加了删除的索引元组的数量。LP_DEAD 删除过程(现在称为“简单删除”,以将其与自底向上删除明确区分开来)通常不需要访问任何额外的表块来检查这些额外的元组。我们无论如何都必须访问相同的表块来生成 latestRemovedXid 值(至少在索引删除操作的 WAL 记录需要这样的值的常见情况下)。测试表明,“额外元组”简单删除增强功能几乎在任何在叶子页中设置了 LP_DEAD 位的负载下,都会增加删除的索引元组数量。也就是说,它几乎总是能成功删除至少一些额外的索引元组。在自然而然地存在大量删除安全元组的情况下,它最有帮助。与旧的简单方法相比,单个删除操作最终删除的索引元组数量通常会增加一个数量级(例如,该补丁的自定义工具显示,在运行回归测试时这种情况经常发生)。添加进一步的增强功能,在利用去重的索引中增强简单删除和自底向上删除:使 nbtree 的 bt_delitems_delete() 函数支持在发布列表元组中进行精细的 TID 删除。现在可以从发布列表元组中删除单独的 TID,前提是 TID 的表访问方法块编号属于作为删除过程一部分被访问的表块(访问表块可以直接或间接触发)。设置发布列表元组的 LP_DEAD 位仍然是一个全有或全无的操作,但现在删除只需要从关于哪些索引元组可删除的正确_一般_想法开始,这一点就没那么重要了。由于 xl_btree_delete 发生了变化,因此增加了 XLOG_PAGE_MAGIC。BTREE_VERSION 没有增加,因为 nbtree 索引的磁盘表示形式没有变化。在 pg_upgrade 之后,在 PostgreSQL 12 或 PostgreSQL 13 上构建的索引将自动受益于自底向上索引删除(即不需要重新索引)。无论用户从哪个 PostgreSQL 版本升级,在 pg_upgrade 之后,所有 B 树索引都可以使用简单删除的增强功能。作者:Peter Geoghegan pg@bowt.ie 审核人:Heikki Linnakangas hlinnaka@iki.fi 审核人:Victor Yegorov vyegorov@gmail.com 讨论:https://postgr.es/m/CAH2-Wzm+maE3apHB8NOtmM=p-DO65j2V5GzAWCOEEuy3JZgb2g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d168b666823b6e0bcf60ed19ce24fb5fb91b8ccf
Tomáš Vondra 推送了
禁止在系统目录上使用 CREATE STATISTICS。添加检查,以防止 CREATE STATISTICS 在系统目录上添加扩展统计信息,类似于索引等。可以使用 allow_system_table_mods GUC 覆盖此行为。此错误自 7b504eb282c 添加扩展统计信息以来就存在,因此回溯到 PostgreSQL 10。作者:Tomas Vondra 报告人:Dean Rasheed 回溯范围:10 讨论:https://postgr.es/m/CAEZATCXAPrrOKwEsyZKQ4uzzJQWBCt6QAvOcgqRGdWwT1zb%2BrQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/c9a0dc34865f2f82d8e186f534d9b605afaa4d11
psql \dX: 列出扩展统计信息对象。新命令列出扩展统计信息对象,可能包括它们的大小。支持所有具有扩展统计信息的过往版本。作者:Tatsuro Yamada 审核人:Julien Rouhaud、Alvaro Herrera、Tomas Vondra 讨论:https://postgr.es/m/c027a541-5856-75a5-0868-341301e1624b%40nttcom.co.jp_1 https://git.postgresql.org/pg/commitdiff/891a1d0bca262ca78564e0fea1eaa5ae544ea5ee
还原“psql \dX: 列出扩展统计信息对象”。还原 891a1d0bca,因为新的 psql 命令 \dX 仅适用于可以读取 pg_statistic_ext_data 目录的用户,而大多数普通用户都缺乏该权限(该目录可能包含敏感的用户数据)。报告人:Noriyoshi Shinoda 讨论:https://postgr.es/m/c027a541-5856-75a5-0868-341301e1624b%40nttcom.co.jp_1 https://git.postgresql.org/pg/commitdiff/1db0d173a2201119f297ea35edfb41579893dd8c
Noah Misch 推送了
修复 pg_dump 中初始权限中的 GRANT OPTION 问题。此处的上下文是一个对象,该对象不再具有最初具有的某些 aclitem。(用户对该对象发出了 REVOKE 或 GRANT 语句。)pg_dump 正在形成 SQL 来重现该对象的 ACL。由于 initdb 不创建带有 GRANT OPTION 的 ACL,因此要触发此错误,需要扩展程序,其中创建脚本建立此类 ACL。没有 PGXN 扩展程序这样做。如果安装确实触发了此错误,则 pg_dump 会省略分号,导致 REVOKE 和下一个 SQL 语句失败。另外,由于受影响的代码旨在删除整个 aclitem,因此它需要普通的 REVOKE,而不是 REVOKE GRANT OPTION FOR。回溯到 9.6,commit 23f34fa4ba358671adab16773e79c17c92cbc870 首次出现的地方。讨论:https://postgr.es/m/20210109102423.GA160022@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/f713ff7c646e5912e08089de74dacdfaaac3d03b
防止过多的 SimpleLruTruncate() 删除。每个核心 SLRU 都会回绕。除了 pg_notify 之外,回绕点可能落在页面的中间。在 PagePrecedes 回调规范中以及在 SimpleLruTruncate() 中使用该回调时考虑到这一点。更新每个回调实现以适应新规范。这会将 SerialPagePrecedesLogically() 从 asyncQueuePagePrecedes() 的样式更改为 CLOGPagePrecedes() 的样式。(虽然 pg_clog 和 pg_serial 共享一个键空间,但 pg_serial 与 pg_notify 完全不同。)此处修复的错误具有与 592a589a04bd456410b853d86bd05faa9432cbbb 相同的症状和用户后续步骤。回溯到 9.5(所有受支持的版本)。审核人:Andrey Borodin 和(在早期版本中)Tom Lane。讨论:https://postgr.es/m/20190202083822.GC32531@gust.leadboat.com https://git.postgresql.org/pg/commitdiff/6db992833c04c0322f7f34a486adece01651f929
Jeff Davis 推送了
Andrey V. Lepikhov 发送了另一个补丁修订版,旨在删除一类可以安全删除的不必要的自连接。
Tom Lane 发送了一个补丁,旨在修复连接字符串中的多个主机在非热备模式下未能进行故障转移的错误,方法是修复连接的一些重试和错误逻辑。
David Fetter 发送了另一个补丁修订版,将 popcount 公开给 SQL。
Andrey V. Lepikhov 发送了另一个补丁修订版,以向 FDW API 添加批量插入接口,并在 PostgreSQL FDW 中使用相同的接口。这应该可以加快对具有外部分区的表的批量加载。
Masahiko Sawada 和 Bharath Rupireddy 交换了补丁,以避免在 conversion_error_callback 中访问目录。
Konstantin Knizhnik 和 Tomáš Vondra 交换了补丁,以实现 libpq 的压缩。
Ian Barwick 和 Greg Sabino Mullane 交换了补丁,通过包含函数参数的数据类型来帮助 psql 制表符自动完成函数。
Mark Dilger 发送了另一个补丁修订版,以添加 contrib 模块 pg_amcheck,这是一个命令行界面,用于针对表和索引运行 amcheck 的验证。
Bharath Rupireddy 发送了另外两个补丁修订版,使在 CTAS 中可以使用并行插入。
Anastasia Lubennikova 发送了另外两个补丁修订版,以在 COPY FREEZE 中设置 PD_ALL_VISIBLE 和可见性映射位。
Masahiko Sawada 发送了一个补丁,用于实现缓冲区加密,以确保 kms 补丁可以与使用 kmgr 管理的加密密钥的其他组件一起使用。
Simon Riggs 发送了另一个补丁修订版,以实现系统版本化的临时表。
Ian Barwick 发送了一个补丁,以修复 attnums 和不存在的列的 has_column_privilege(),方法是即使在用户具有表级权限的情况下也确认列的存在,否则如果提供了无效的 attnum,该函数会很乐意报告用户对已删除或不存在的列具有权限。
Yugo Nagata 发送了另一个补丁修订版,以实现增量视图维护。
Atsushi Torikoshi 发送了另一个补丁修订版,以将计划类型(通用或自定义)添加到 pg_stat_statements 中。
Peter Smith 发送了另外两个补丁修订版,使可以将后台工作程序用于 tablesync。
Kyotaro HORIGUCHI 发送了另外两个补丁修订版,使可以在不进行堆重写的情况下更改表的持久性(LOGGED/UNLOGGED)。
Atsushi Torikoshi 发送了另一个补丁修订版,使可以通过新函数 pg_get_target_backend_memory_contexts() 收集指定进程的内存上下文。
John Naylor 发送了一个补丁,用于删除对现在已删除的 replication_timeout GUC 的引用。
Hou Zhijie 发送了另外两个补丁修订版,以向 eval_const_expressions_mutator 添加 Nullif 情况。
Justin Pryzby 发送了另一个 pg_upgrade 补丁修订版,以添加一个测试来执行二进制兼容性。
Álvaro Herrera 发送了另一个补丁修订版,以在 REINDEX CONCURRENTLY 期间设置 PROC_IN_SAFE_IC。
Tomáš Vondra 发送了另外四个补丁修订版,用于为外部表添加批量插入。
Li Japin 和 Bharath Rupireddy 交换了补丁,以修复 ALTER PUBLICATION...DROP TABLE 行为,方法是安排当 rel_sync_cache_publication_cb() 中的条目失效时,将 pubactions 标记为 false,并让 get_rel_sync_entry() 重新计算 pubactions。
Takamichi Osumi 发送了另外三个补丁修订版,以添加新的 wal_level 以禁用 WAL 日志记录,该日志记录旨在通过牺牲中间失败时留下不可恢复的集群为代价来加快批量加载速度。
Bruce Momjian 发送了另外三个补丁修订版,以实现密钥管理。
DRU 提交了数据页校验和文档的第三个补丁修订版,并支持在运行中的集群中启用/禁用校验和。
Heikki Linnakangas 和 Andrey Borodin 交换了补丁,以向“pageinspect”添加用于检查 GiST 索引的函数。
Dilip Kumar 提交了另一个补丁修订版,以支持表的自定义压缩方法。
Yuzuko Hosoya 提交了一个补丁,使得可以使用 DISCARD ALL 释放用于引用完整性的 SPI 计划,这将减少在具有多个分区的表上创建或使用外键时使用的内存量。
Stephen Frost 提交了一个补丁,引入了一个过时的附录,将旧术语链接到新文档。
Stephen Frost 提交了另一个补丁修订版,以使用预取进行 ANALYZE,并使自动分析的日志详细信息与自动清理的日志详细信息保持一致。
Michaël Paquier 和 Aleksey Kondratov 交换了补丁,以重构实用程序语句选项。
Peter Eisentraut 提交了 pageinspect 的另一个补丁修订版,该修订版将块号参数更改为 bigint,以避免可能的溢出。
Tomáš Vondra 提交了三个 BRIN 多范围索引实现的补丁修订版。
Heikki Linnakangas 提交了两个补丁修订版,以为了安全和清晰起见,移动了一些 ResourceOwnerEnlarge() 调用,并通过使用单个数组和哈希而不是每个对象类型一个,使资源所有者更容易扩展。
Kyotaro HORIGUCHI 提交了一个补丁,以修复 RelationNeedsWAL 的一些误用。
Dilip Kumar 提交了另一个补丁修订版,以确保 pg_is_wal_replay_paused 等待恢复暂停。
Kyotaro HORIGUCHI 提交了另一个补丁修订版,将统计收集器的临时存储从文件移动到共享内存。
Kyotaro HORIGUCHI 提交了另一个补丁修订版,通过添加 CatCache 过期功能,来保护系统缓存免受负缓存条目的膨胀。
Pavel Stěhule 提交了另一个补丁修订版,以实现模式变量。
Li Japin 提交了一个补丁,修复了 WalSndPrepareWrite 注释中的一个拼写错误。
Simon Riggs 提交了一个补丁,使可以在不验证索引的情况下更改索引的唯一性,并提供一种单独进行验证的方法。
Takayuki Tsunakawa 提交了一个补丁,通过将几个不正确的 += 赋值更改为 = 来修复 shmem TOC 的大小计算。
Peter Geoghegan 提交了一个补丁,将 vacuum_cost_page_miss 的默认值降低到 3。
Ian Barwick 提交了另一个补丁修订版,以将锁获取等待开始时间添加到 pg_lock_status 函数。
Andy Fan 提交了一个补丁,使 cost_sort 更准确。
Masahiko Sawada 提交了另一个补丁修订版,使可以进行涉及多个 postgres 外部服务器的事务。
Fujii Masao 和 Bharath Rupireddy 交换了补丁,以添加一个 postgres_fdw 函数来丢弃缓存的连接,以及一个 postgres_fdw 特定的 GUC 和一个系统范围的 GUC,keep_connections。
Hou Zhijie 提交了一个补丁,以从 reorderbuffer.c 中的注释中删除一个多余的撇号。
Álvaro Herrera 提交了一个补丁,使 VACUUM 在计算要删除的元组的 Xid 地平线时忽略正在进行 CIC 和 RC 的进程。
Álvaro Herrera 提交了一个补丁,以增加 pg_commit_ts 缓冲区的大小。
David Zhang 提交了一个补丁,更新了表空间文档,使其与 pgbench 的新表访问方法选项保持一致。
Iwata Aya 提交了另一个补丁修订版,以启用 libpq 的跟踪。
Tomáš Vondra 提交了两个补丁修订版,以涵盖具有扩展统计信息的表达式。
Tom Lane 提交了一个补丁,以修复 pull_varnos() 中的错误计算。
Thomas Munro 提交了另一个补丁修订版,使 pgbench 可以延迟查询直到建立连接。