本周人物: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/
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。
Thomas Munro 推送
提供 pg_preadv() 和 pg_pwritev()。提供同步的向量化文件 I/O 例程。这些映射到 preadv() 和 pwritev(),并为没有这些功能的系统提供备用实现。还提供了一个 wrapper pg_pwritev_with_retry(),它可以自动重试短写入。Reviewed-by: Tom Lane tgl@sss.pgh.pa.us Reviewed-by: Andres Freund andres@anarazel.de Discussion: 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。在积累更多经验后,我们可能希望稍后调整此数字。Reviewed-by: Tom Lane tgl@sss.pgh.pa.us Reviewed-by: Andres Freund andres@anarazel.de Discussion: https://postgr.es/m/CA%2BhUKGJA%2Bu-220VONeoREBXJ9P3S94Y7J%2BkqCnTYmahvZJwM%3Dg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/ce6a71fa5300cf00adf32c9daee302c523609709
修复 dependency.h 中的函数原型。Commit 257836a7 意外删除了函数原型上几个冗余但约定俗成的 "extern" 关键字。将其恢复。Reported-by: Alvaro Herrera alvherre@alvh.no-ip.org https://git.postgresql.org/pg/commitdiff/f315205f3fafd6f6c7c479f480289fcf45700310
不要在 src/port/pwrite.c 中使用 elog()。尽管此疏忽尚未导致任何问题,但在不支持 pwrite() 的系统上,如果在前端代码中使用 pg_pwrite(),它将无法链接。改用断言。另外,顺便进行 pgindent。Discussion: 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() wrapper 移到一个更永久的位置。Reported-by: Tom Lane tgl@sss.pgh.pa.us Discussion: 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。之前,我们有一个无组织的 printfPQExpBuffer 和 appendPQExpBuffer 调用混合,用于在 libpq 中报告错误。此提交建立了一个统一的规则,即应使用 appendPQExpBuffer[Str]。conn->errorMessage 仅在应用程序请求开始时重置,然后累积消息直到完成。我们可以移除不少于三种不同的临时机制,这些机制曾用于在一系列操作中实现错误消息的连接效果。虽然这在概念上使事情更加清晰,但主要原因是使多目标主机功能(已添加一段时间)更加安全。以前,在单个主机连接尝试期间发生的错误可能会覆盖之前尝试的记录。 (报告仍然不足,因为很难区分哪个主机发生了故障,但这似乎是另一个提交的问题。)当前,lo_import 和 lo_export 包含 "永远不要使用 printfPQExpBuffer" 规则的例外。如果更改它们,我们可能会在实际读写失败之前报告偶然的 lo_close 失败,这会令人困惑,尤其因为 lo_close 发生在主要失败之后。我们可以通过创建内部版本的 lo_close 来改进这一点,它不会重置 errorMessage;但我们也需要一个具有此功能的 PQfn() 版本,但目前看来并不值得付出努力。Discussion: https://postgr.es/m/BN6PR05MB3492948E4FD76C156E747E8BC9160@BN6PR05MB3492.namprd05.prod.outlook.com https://git.postgresql.org/pg/commitdiff/ffa2e4670123124b92f037d335a1e844c3782d3f
允许 pg_regress.c wrapper 后处理测试结果文件。向 regression_main() 添加一个可选的回调函数,如果提供了该回调函数,则在尝试将其与期望结果文件进行比较之前,会对每个测试输出文件调用该回调函数。主程序和隔离测试程序(目前)不需要此功能。在 pg_regress_ecpg 中,添加一个过滤器,该过滤器会从 "无法连接" 错误报告中删除目标主机详细信息。截至此提交,此过滤器不执行任何操作,但下一个提交将需要它。长远来看,我们可能希望提供更通用、可能是基于模式的测试输出过滤机制。目前,这将解决当前问题。Discussion: https://postgr.es/m/BN6PR05MB3492948E4FD76C156E747E8BC9160@BN6PR05MB3492.namprd05.prod.outlook.com https://git.postgresql.org/pg/commitdiff/800d93f314b0f7c10193e48b259f87800cb85d84
统一标识 libpq 连接失败报告中的目标主机。在套接字()调用之后发生的所有连接失败情况下,前缀 "could not connect to host-or-socket-path:",并删除附加到其中一些消息的临时服务器标识数据。这应该在多目标主机情况下产生更易于理解的错误报告,尤其是在出现非标准错误情况下(因为其中没有提供服务器标识信息)。例如,以前,具有错误端口号的连接尝试,如 "psql -p 12345 -h localhost,/tmp" 可能会产生 psql: error: could not connect to server: Connection refused Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 12345? could not connect to server: Connection refused Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 12345? could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.12345"? 现在看起来像 psql: error: could not connect to host "localhost" (::1), port 12345: Connection refused Is the server running on that host and accepting TCP/IP connections? could not connect to host "localhost" (127.0.0.1), port 12345: Connection refused Is the server running on that host and accepting TCP/IP connections? could not connect to socket "/tmp/.s.PGSQL.12345": No such file or directory Is the server running locally and accepting connections on that socket? 这需要调整一些回归测试,以允许连接失败消息内容的变化。Discussion: https://postgr.es/m/BN6PR05MB3492948E4FD76C156E747E8BC9160@BN6PR05MB3492.namprd05.prod.outlook.com https://git.postgresql.org/pg/commitdiff/52a10224e3cc1d706ba9800695f97cb163b747d5
在 "无法立即连接" 失败后尝试下一个主机。如果服务器返回 ERRCODE_CANNOT_CONNECT_NOW,则尝试下一个主机,如果提供了多个主机名。这允许优雅地处理可能尚未进入热备用模式的备用服务器。在上一条提交之后,重试更多错误情况似乎是可行的,但我不(tgl)倾向于过于激进地处理 --- 例如,对于 bad-password 等情况,不清楚是否可取。但这种情况似乎足够安全。Hubert Zhang,由 Takayuki Tsunakawa 审查 Discussion: https://postgr.es/m/BN6PR05MB3492948E4FD76C156E747E8BC9160@BN6PR05MB3492.namprd05.prod.outlook.com https://git.postgresql.org/pg/commitdiff/c1d589571c497a952d7fbe40d9828655859d746f
重新思考 ERRCODE_IDLE_SESSION_TIMEOUT 的 SQLSTATE 代码。将其移至 57 类(Operator Intervention),鉴于从客户端的角度来看,它的行为与 ERRCODE_ADMIN_SHUTDOWN 等非常相似,这似乎是一个更好的选择。在一个全新的环境中,我也会将 ERRCODE_IDLE_IN_TRANSACTION_SESSION_TIMEOUT 放在这里。但这已经存在了几年,所以可能无法更改其 SQLSTATE 代码。Discussion: 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 类型继续与完整类型互换排序,opclasses 也与 opfamilies 互换排序。https://git.postgresql.org/pg/commitdiff/d5ab79d815783fe60062cefc423b54e82fbb92ff
将 ALTER TABLE ... ATTACH PARTITION 声明为单独的 ArchiveEntry。以前,我们将 ATTACH PARTITION 命令作为子表的 ArchiveEntry 发出的。这是一个糟糕的选择,因为它使恢复分区作为独立表变得复杂;您必须忽略 ATTACH 的错误,这在直接到数据库使用 pg_restore 进行恢复时甚至不是一个选项。(pg_restore 将整个 ArchiveEntry 作为单个 PQexec 发出,因此任何错误都会回滚表创建。)因此,将其作为其自己的 ArchiveEntry 单独列出,正如我们已经为 index ATTACH PARTITION 命令所做的那样。Justin Pryzby Discussion: https://postgr.es/m/20201023052940.GE9241@telsasoft.com https://git.postgresql.org/pg/commitdiff/9a4c0e36fbd671b5e7426a5a0670bdd7ba2714a0
Doc:修复 ALTER PUBLICATION 所需权限的描述。将表添加到发布(publication)需要该表的拥有权(以及发布的拥有权)。这一点在任何地方都没有提到。https://git.postgresql.org/pg/commitdiff/cc865c0f319fde22540625e02863f42e9853b3e4
pg_dump:为 INDEX ATTACH ArchiveEntries 标记所有者。尽管分区索引附加到其父索引没有单独的所有权,但其 ArchiveEntry 仍然需要标记所有者,以确保在恢复时使用 --use-set-session-authorization 时由适当的角色运行 ALTER 命令。没有这个,ALTER 将由启动恢复会话的角色运行,这通常会成功,但形式上是错误的。回溯到 v11,当时添加了这种 ArchiveEntry 类型。在 HEAD 中,将等效的注释添加到刚刚添加的 TABLE ATTACH 情况,该情况我已经处理得当。Discussion: https://postgr.es/m/1094034.1610418498@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9eabfe300a22ad3d776dc293265e15379790bd9a
Doc:澄清 pg_dump 中反向选项的行为。将归档数据转换为 SQL 文本的选项在转储为归档格式时将被忽略。文档以前说 "没有意义",这是没有帮助的。Discussion: https://postgr.es/m/161052021249.12228.9598689907884726185@wrigleys.postgresql.org https://git.postgresql.org/pg/commitdiff/06ed235adeb621a73cafd6ab35fa2405b3177329
在 pgbench 中不允许使用数字作为变量名的第一个字符。此限制的目的是避免尝试将变量替换到时间戳文字值中,因为这些值可能包含像 '12:34' 这样的字符串。还有很多工作要做,以减少 pgbench 在不应该替换的地方进行替换的倾向。但这足以解决 Jaime Soler 抱怨的情况,并且足够简单,可以回溯。回溯到 v11;在 commit 9d36a3866 之前,pgbench 对变量名的定义略有不同,而且似乎不应该因为这个原因更改长期稳定的分支。Fabien Coelho Discussion: https://postgr.es/m/alpine.DEB.2.22.394.2006291740420.805678@pseudo https://git.postgresql.org/pg/commitdiff/c21ea4d53e9404279273da800daa49b7b9a5e81e
Doc,或多或少:取消注释很久以前修复的教程示例。撤销 commit 344190b7e 的一部分。早在二十世纪,我们就遇到了多语句 SQL 函数的一些问题,但它们已经正常工作了很长时间。Daniel Westermann Discussion: 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 Discussion: https://postgr.es/m/CAD21AoAT4aHP0Uxq91qpD7NL009tnUYQe-b14R3MnSVOjtE71g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/5a6f9bce8dabd371bdb4e3db5dda436f7f0a680f
pg_dump:为 PUBLICATION TABLE ArchiveEntries 标记所有者。这与提交 9eabfe300 对 INDEX ATTACH 条目的修复相同,但用于表到发布(publication)的附加。与该情况一样,即使后端不记录附加的 "所有权",我们也应该在转储归档中标记它,以便在恢复时由应运行 ALTER PUBLICATION 命令的角色来运行。现有行为导致 ALTER 由启动恢复的原始角色执行;这通常可以正常工作,但可能存在一些边际情况会导致失败。补丁的大部分内容是关于更改 struct PublicationRelInfo 以包含指向相关 PublicationInfo 对象的指针,以便在需要时可以从中获取所有者的名称。同时,我重写了 getPublicationTables(),使其只查询一次 pg_publication_rel,而不是每个表一次。回溯到 v10,当时引入了此代码。Discussion: 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 中会有一个 OS 自己的版本的 SDK,并且编译器将默认使用它。所有这些文档记录都很差,但实验表明,"xcrun --show-sdk-path" 会给出编译器实际使用的 sysroot 路径,至少在某些情况下如此。因此,首先尝试这个,但如果 xcrun 失败则恢复到 xcodebuild(在非常旧的 Xcode 中,它缺失或缺少 --show-sdk-path 开关)。另外,"xcrun --show-sdk-path" 可能会给出一个有效的路径,但缺少任何 OS 版本标识符。我们并不真正想要这个,因为将 -isysroot 链接到构建标志的动机主要是确保 PG 安装的所有部分都针对相同的 SDK 进行构建,即使考虑到稍后构建的扩展和/或在另一台机器上构建的扩展。坚持在目录名称中找到 "N.N" 才接受结果。(将 "--sdk macosx" 添加到 xcrun 调用似乎会给出与 xcodebuild 相同的答案,但通常更快,因为它被缓存,所以我们也尝试将其作为回退。)在这些情况下,我们不想使用 Xcode 的默认 SDK 的核心原因是,Apple 引入新系统调用的技术与 Autoconf 配合不佳:例如,在使用 Big Sur SDK 时,configure 会认为 preadv/pwritev 存在,即使在旧的 macOS 版本中它们不存在。我们希望有一个更好的解决方案来解决这个问题,但此补丁并未尝试修复它。根据 Sergey Shinderuk 的报告。回溯到所有支持的版本。Discussion: https://postgr.es/m/ed3b8e5d-0da8-6ebd-fd1c-e0ac80a4b204@postgrespro.ru https://git.postgresql.org/pg/commitdiff/4823621db312a0597c40686c4c94d47428889fef
为 test_regex.c 添加缺失的数组扩容逻辑。报告 "部分" 匹配的语句可能会超出初始分配的输出数组,因此它需要与主循环中的数组重调大小逻辑相同的副本。我在 ca8217c10 中忽略了此需求。根据 Alexander Lakhin 的报告。Discussion: https://postgr.es/m/3206aace-50db-02a-bbea-76d5cdaa2cb6@gmail.com https://git.postgresql.org/pg/commitdiff/0c7d3bb99f72d66ec6ac63aee4c5fe6d683eee86
Amit Kapila 提交
优化 recovery 的 DropRelFileNodeBuffers()。DropRelFileNodesBuffers() 的恢复路径已优化,当要截断的关系块数量低于某个阈值时,可以避免扫描整个缓冲区池。在这些情况下,我们通过查找 BufMapping 表来找到缓冲区。这在许多情况下(测试了 1000 个关系)截断了几个小表,并且服务器配置了较大的 shared buffers 值(大于等于 100GB)时,性能提高了 100 多倍。此优化有助于以下情况:(a) vacuum 或 autovacuum 截断了关系末尾的任何空页面,或 (b) 关系在创建的同一事务中被截断。此提交引入了一个新的 API smgrnblocks_cached,它返回关系 fork 的块数量的缓存值。这有助于我们确定准确的关系大小,以便应用此优化。需要准确的大小以确保我们不会为要删除的关系留下任何缓冲区,否则后台写入器或检查点可能会在刷新对应于不存在文件的缓冲区时导致 PANIC 错误。作者:Kirk Jamison,基于 Amit Kapila 的想法 Reviewed-by: Kyotaro Horiguchi, Takayuki Tsunakawa, and Amit Kapila Tested-By: Haiying Tang Discussion: https://postgr.es/m/OSBPR01MB3207DCA7EC725FDD661B3EDAEF660@OSBPR01MB3207.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/d6ad34f3410f101f9909c0918a49d6ce86fa216c
修复 relation 描述符泄漏。在逻辑复制期间,我们在通过分区关系的根发送更改时,错过了关闭 relation 描述符。作者:Amit Langote 和 Mark Zhao Reviewed-by: Amit Kapila 和 Ashutosh Bapat Backpatch-through: 13,bug 在此引入 Discussion: https://postgr.es/m/tencent_41FEA657C206F19AB4F406BE9252A0F69C06@qq.com Discussion: https://postgr.es/m/tencent_6E296D2F7D70AFC90D83353B69187C3AA507@qq.com https://git.postgresql.org/pg/commitdiff/044aa9e70e552d9adb4f6429a1b0e96dde946a92
优化 recovery 的 DropRelFileNodesAllBuffers()。与 commit d6ad34f341 类似,此补丁通过避免完整的缓冲区池扫描来优化 DropRelFileNodesAllBuffers(),而是通过在 BufMapping 表中查找来找到需要失效的缓冲区。此优化有助于需要删除关系文件的操作,如 Truncate、Drop、Create Table 的 Abort 等。作者:Kirk Jamison Reviewed-by: Kyotaro Horiguchi, Takayuki Tsunakawa, and Amit Kapila Tested-By: Haiying Tang Discussion: https://postgr.es/m/OSBPR01MB3207DCA7EC725FDD661B3EDAEF660@OSBPR01MB3207.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/bea449c635c0e68e21610593594c1e5d52842cdd
修复 SnapBuildSerialize 中的内存泄漏。在逻辑解码期间,序列化快照到磁盘时,快照的内存会泄漏。这部分内存将在 walsender 停止流式传输更改后才会释放。当主节点频繁记录备用快照(例如,当用户尝试创建许多复制槽时)时,这可能导致内存大幅增加。Reported-by: funnyxj.fxj@alibaba-inc.com Diagnosed-by: funnyxj.fxj@alibaba-inc.com Author: Amit Kapila Backpatch-through: 9.5 Discussion: 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 分配,所以我们不需要再次为它分配内存。我们决定不回溯它,因为似乎没有哪个情况会导致有意义的泄漏。Author: Zhijie Hou Reviewed-by: Daniel Gustafsson Discussion: https://postgr.es/m/229fed2eb8c54c71a96ccb99e516eb12@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/c95765f47673b16ed36acbfe98e1242e3c3822a3
Álvaro Herrera 提交
修复 catcache.c 注释中的笔误。此注释自 commit 2c03216d8311 引入以来一直不正确。Author: Masahiko Sawada sawada.mshk@gmail.com Discussion: https://postgr.es/m/CAD21AoAzz6qipFJBbGEaHmyWxvvNDp8httbwLR9tUQWaTjUs2Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a3e51a36b77ab073df88860cc21b2a6094d699d4
发明 struct ReindexIndexInfo。此结构用于 ReindexRelationConcurrently 以跟踪要处理的关系。这可以节省重复获取某些数据,并且将来也有用。Reviewed-by: Dmitry Dolgov 9erthalion6@gmail.com Reviewed-by: Hamid Akhtar hamid.akhtar@gmail.com Reviewed-by: Masahiko Sawada sawada.mshk@gmail.com Discussion: https://postgr.es/m/20201130195439.GA24598@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/c6c4b37395b22f7e649234453a0aafe74d61b7e6
在 create index 文档中指出 vacuum 考虑事项。回溯到 pg12,这是它能达到的最远版本,没有冲突。Author: James Coleman jtc331@gmail.com Reviewed-by: "David G. Johnston" david.g.johnston@gmail.com Discussion: 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。可以说,后者更正确。可以通过执行 ALTER TABLE ONLY some_partitioned_table SET TABLESPACE pg_default; ALTER TABLE ONLY some_partitioned_table SET TABLESPACE original_tablespace; 为非数据库默认表空间的现有分区表/索引添加保护性的 pg_shdepend 条目。因为这些分区对象没有存储,所以不需要实际移动文件,因此所需时间不应超过获取锁所需的时间。此查询可用于查找此类关系:SELECT ... FROM pg_class WHERE relkind IN ('p', 'I') AND reltablespace <> 0 Reported-by: Alexander Lakhin exclusion@gmail.com Discussion: https://postgr.es/m/16577-881633a9f9894fd5@postgresql.org Author: Álvaro Herrera alvherre@alvh.no-ip.org Reviewed-by: Michael Paquier michael@paquier.xyz https://git.postgresql.org/pg/commitdiff/ebfe2dbd6b624e2a428e14b7ee9322cc096f63f7
避免并发 reindex 中的虚假等待。这类似于 commit c98763bf51bf,但用于 REINDEX CONCURRENTLY。具体来说:此标志指示在进行 CREATE INDEX CONCURRENTLY 和 REINDEX CONCURRENTLY 时,当前进程可以安全地忽略以等待其他快照。这有助于两个进程执行其中一项操作时不会死锁,并且还可以避免虚假等待。Author: Álvaro Herrera alvherre@alvh.no-ip.org Reviewed-by: Dmitry Dolgov 9erthalion6@gmail.com Reviewed-by: Hamid Akhtar hamid.akhtar@gmail.com Reviewed-by: Masahiko Sawada sawada.mshk@gmail.com Discussion: https://postgr.es/m/20201130195439.GA24598@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/f9900df5f94936067e6fa24a9df609863eb08da2
Michaël Paquier 提交
修复 catcache.c 注释中的例程名称。Author: Bharath Rupireddy Discussion: https://postgr.es/m/CALj2ACUDXLAkf_XxQO9tAUtnTNGi3Lmd8fANd+vBJbcHn1HoWA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/fce7d0e6efbef304e81846c75eddf73099628d10
重构十六进制和编码例程。此提交解决了 c3826f83 中将十六进制解码例程移到 src/common/ 的一些问题:- 解码函数缺少溢出检查,因此当用于安全相关功能时,如果使用不当,它可能成为越界写入的门户,并且可能未被发现。与 SCRAM 使用的 src/common/ 中的 base64 例程一样,此例程经过重构,通过将目标缓冲区大小作为参数传递来检查溢出,并在执行任何写入之前检查溢出。- 编码函数丢失。此函数已移至 src/common/,并具有与解码部分相同的溢出检查。失败时,src/common/ 的十六进制例程会根据与前端工具讨论的情况发出错误,但不能用于共享库。请注意,这就是为什么 ECPG 不包含在此提交中,它仍然包含重复的逻辑来执行十六进制编码和解码。同时,此提交在 encode.c 的现有 escape 和 base64 例程中使用了更好的源和目标缓冲区变量名,并使其在溢出检测方面更加健壮。以前的核心代码在进行越界写入后发出 FATAL,如果通过 SQL 函数进行,则足以检测到影响此代码区域的更改问题。相反,在进行越界写入之前会发出错误。十六进制例程直接用于 bytea 转换和备份清单,没有这些健全性检查。当前的调用恰好没有问题,但粗心使用这些 API 很容易导致 CVE 级别的错误。Author: Bruce Momjian, Michael Paquier Reviewed-by: Sehrope Sarkuni Discussion: https://postgr.es/m/20201231003557.GB22199@momjian.us https://git.postgresql.org/pg/commitdiff/aef8948f38d9f3aa58bf8c2d4c6f62a7a456a9d1
修复回收 WAL 段时的 O(N^2) stat() 调用。跟踪最后回收的段号的计数器在回收单个段时被初始化,而它应该在回收整个段周期中使用,以防止与已回收条目相关的无用检查。此性能问题由 b254589 引入,并于 61b86142 中首次实现。由于缺少字段投诉,因此不执行回溯。Reported-by: Andres Freund, Thomas Munro Author: Michael Paquier Reviewed-By: Andres Freund Discussion: https://postgr.es/m/20170621211016.eln6cxxp3jrv7m4m@alap3.anarazel.de Discussion: 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 中已移除对这些变量的最后引用,因此这可以稍微清理代码。Discussion: https://postgr.es/m/X//ggAqmTtt+3t7X@paquier.xyz https://git.postgresql.org/pg/commitdiff/ccf4e277a4de120a2f08db7e45399d87e1176bda
Heikki Linnakangas 提交
向 'pageinspect' 添加用于检查 GiST 索引的函数。Author: Andrey Borodin and me Discussion: 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。Discussion: 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 来修复。根据 buildfarm 在 thorntail 上的失败。Discussion: https://postgresql.ac.cn/message-id/3B4F97E5-40FB-4142-8CAA-B301CDFBF982%40iki.fi https://git.postgresql.org/pg/commitdiff/5abca4b1cd7193d6a5c8235c97eb240312190bcb
Magnus Hagander 已推送
删除不正确的标记。似乎 737d69ffc3c 进行了复制粘贴或自动化错误,导致多了两个右括号。Reported-By: Michael Vastola Backpatch-through: 13 Discussion: 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。这是该参数的唯一用例,因此将其重用于此更狭窄的用例比发明新东西更清晰。Author: Laurenz Albe Reviewed-By: Magnus Hagander, Soumyadeep Chakraborty, Masahiro Ikeda Discussion: https://postgr.es/m/b07e1f9953701b90c66ed368656f2aef40cac4fb.camel@cybertec.at https://git.postgresql.org/pg/commitdiff/960869da0803427d14335bba24393f414b476e2c
向 initdb 添加 --no-instructions 参数。指定此参数将删除有关如何启动服务器的信息性消息。这旨在供不同打包系统中的 wrapper 使用,其中这些说明很可能已经不正确,但 initdb 的其他输出仍然有用(因此将所有内容重定向到 /dev/null 会不好)。Author: Magnus Hagander Reviewed-By: Peter Eisentraut Discusion: https://postgr.es/m/CABUevEzo4t5bmTXF0_B9WzmuWpVbMpkNZZiGvzV8NZa-=fPqeQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e09155bd62f0ac5817cb3d736eb35adf4200549e
添加关于校验和的文档章节。数据校验和在文档中没有更长的讨论,这增加了一个简短的概述部分。从在线启用校验和的大型补丁中提取,该补丁有更多的作者和审阅者。Author: Daniel Gustafsson Reviewed-By: Magnus Hagander, Michael Banck (以及其他通过大型补丁) Discussion: https://postgr.es/m/5ff49fa4.1c69fb81.658f3.04ac@mx.google.com https://git.postgresql.org/pg/commitdiff/cf621d9d84db1e6edaff8ffa26bad93fdce5f830
Fujii Masao 提交
在恢复冲突解决时记录长时间等待。这是 commit 0650ff2303 工作的一个后续。此提交扩展了 log_recovery_conflict_waits,以便在死锁超时后恢复冲突已解决时,也会生成日志消息,即当启动进程在死锁超时后完成等待恢复冲突时。这有助于调查恢复冲突阻止恢复应用 WAL 的时间。Author: Fujii Masao Reviewed-by: Kyotaro Horiguchi, Bertrand Drouvot Discussion: https://postgr.es/m/9a60178c-a853-1440-2cdc-c3af916cff59@amazon.com https://git.postgresql.org/pg/commitdiff/39b03690b529935a3c33024ee68f08e2d347cf4f
确保备用服务器能够跟随主服务器的新时间线。Commit 709d003fbd 重构了 WAL 读取代码,但意外导致 WalSndSegmentOpen() 在从历史时间线读取时未能跟随时间线切换。此问题导致备用服务器在启用 WAL 归档时无法跟随主服务器的新时间线。如果段内存在时间线切换,WalSndSegmentOpen() 应该读取属于新时间线的 WAL 段。但之前由于未能跟随时间线切换,它试图读取旧时间线的 WAL 段。启用 WAL 归档时,该旧时间线的 WAL 段已重命名为 .partial,因此不存在。这导致主服务器尝试读取不存在的 WAL 段,从而导致复制失败并出现错误 "ERROR: requested WAL segment ... has already been removed"。此提交修复了 WalSndSegmentOpen(),使其能够跟随时间线切换,以确保备用服务器即使在启用了 WAL 归档的情况下也能跟随主服务器的新时间线。此提交还添加了回归测试,以检查备用服务器在启用了 WAL 归档时是否能够跟随主服务器的新时间线。回溯到引入 bug 的 v13 版本。Reported-by: Kyotaro Horiguchi Author: Kyotaro Horiguchi,由 Fujii Masao 调整 Reviewed-by: Alvaro Herrera, Fujii Masao Discussion: https://postgr.es/m/20201209.174314.282492377848029776.horikyota.ntt@gmail.com https://git.postgresql.org/pg/commitdiff/fef5b47f6bfc9bfec619bb2e6e66b027e7ff21a3
改进 CLOSE、DECLARE、FETCH 和 MOVE 的制表符补全。此提交使 CLOSE、FETCH 和 MOVE 命令可以制表符补全游标列表。此提交还使 DECLARE 命令可以制表符补全选项。Author: Shinya Kato, Sawada Masahiko,由 Fujii Masao 调整 Reviewed-by: Shinya Kato, Sawada Masahiko, Fujii Masao Discussion: https://postgr.es/m/b0e4c5c53ef84c5395524f5056fc71f0@MP-MSGSS-MBX001.msg.nttdata.co.jp https://git.postgresql.org/pg/commitdiff/3f238b882c276a59f5d98224850e5aee2a3fec8c
稳定时间线切换回归测试。Commit fef5b47f6b 添加了回归测试,以检查备用服务器在启用了 WAL 归档时是否能够跟随主服务器的新时间线。但 buildfarm 成员 florican 报告此测试失败,因为请求的 WAL 段被删除并且复制失败。这是一个时间问题。由于测试中既没有使用复制槽,也没有设置 wal_keep_size,检查点可能会删除仍然对复制至关重要的 WAL 段。此提交通过在测试中使用 wal_keep_size 来稳定测试。回溯到添加此提交的回归测试的 v13 版本。Author: Fujii Masao Discussion: 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" 错误,并且即使服务器尚未被删除,也无法获取服务器名称。Author: Bharath Rupireddy Reviewed-by: Fujii Masao Discussion: https://postgr.es/m/CALj2ACVRZPUB7ZwqLn-6DY8C_UmPs6084gSpHA92YBv++1AJXA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/5e5f4fcd89c082bba0239e8db1552834b4905c34
修复存储 TOC 所需共享内存量的计算。Commit ac883ac453 重构了 shm_toc_estimate(),但错误地更改了 TOC 的共享内存大小计算。以前这可能导致分配过大的内存。回溯到引入 bug 的 v11 版本。Author: Takayuki Tsunakawa Discussion: https://postgr.es/m/TYAPR01MB2990BFB73170E2C4921E2C4DFEA80@TYAPR01MB2990.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/2ad78a87f018260d4474eee63187e1cc73c9b976
Peter Geoghegan 提交
传递 "逻辑上未更改索引" 提示。添加一个 executor aminsert() 提示机制,告知索引 AM,传入的索引元组(伴随提示的元组)不是通过逻辑上修改索引任何键列的 SQL 语句插入的。当 UPDATE 发生(尽管仅对所有键列逻辑上未更改的索引)并且没有应用像 heapam 的 HOT 这样的优化时,索引会收到此提示。接收到插入提示的任何索引元组都应是至少一个现有旧版本的副本,该副本对于同一个逻辑行是必需的。相关版本通常存储在同一索引页上,至少在应用提示的索引 AM 中是这样。在索引 AM 级别识别 MVCC 版本重复与真正逻辑行重复之间的差异,有助于清理垃圾索引元组。清理可以智能地定位可能是垃圾的元组,而不会在不太有希望的元组/页上浪费太多周期(版本重复很少的索引页)。这是即将到来的提交的基础设施,该提交将教会 nbtree 执行自下而上的索引删除。目前还没有索引 AM 应用此提示。Author: Peter Geoghegan pg@bowt.ie Reviewed-By: Victor Yegorov vyegorov@gmail.com Discussion: https://postgr.es/m/CAH2-Wz=CEKFa74EScx_hFVshCOn6AA5T-ajFASTdzipdkLTNQQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9dc718bdf2b1a574481a45624d42b674332e2903
增强 nbtree 索引元组删除。教会 nbtree 和 heapam 协作,以便主动删除表示已死 MVCC 版本的重复元组。这是 "自下而上的删除"。每次自下而上的删除传递都是根据 nbtree 叶子页上的大量版本而延迟触发的。这通常涉及一个 "逻辑上未更改索引" 提示(这些提示由提交 9dc718bd 添加的执行器机制生成)。自下而上索引删除的直接目标是避免完全由版本重复引起的 "不必要" 的页面拆分。它自然也有一个更有用的效果:它充当了针对任何给定逻辑行累积过多索引元组版本的后备。自下而上的索引删除是对我们现在可能称为 "自上而下的索引删除" 的补充:由 VACUUM 执行的索引 vacuuming。自下而上的索引删除响应查询的即时局部需求,同时让 autovacuum 来执行索引的偶尔的全面清理。总体效果是避免与 UPDATE 的 "版本交错" 相关的某些病态性能问题。索引 AM 用于执行元组删除的先前表am接口(table_compute_xid_horizon_for_tuples() 函数)已被替换为一个新的接口,该接口支持某些新要求。此提交添加的大部分(也许是所有)功能也可以扩展到其他索引 AM。这留待以后提交完成。通过添加逻辑来考虑额外的索引元组(未标记为 LP_DEAD)以便在传递中删除,扩展了 nbtree 中 LP_DEAD 标记的索引元组的删除。这在许多情况下显著增加了删除的索引元组数量。"简单删除"(现在称为 "简单删除" 以清楚地区分于自下而上的删除)过程通常不需要访问任何额外的表块来检查这些额外的元组。我们无论如何都要访问相同的表块来生成 latestRemovedXid 值(至少在索引删除操作的 WAL 记录需要该值的情况下)。测试表明,"额外元组" 简单删除增强功能几乎可以删除任何在叶子页面上设置了 LP_DEAD 位的 LSN 的索引元组,从而增加了已删除索引元组的数量。也就是说,它几乎总能删除至少一些额外的索引元组。它在恰好有很多删除安全元组的情况下最有帮助。单个删除操作删除的索引元组数量比旧的简单方法多一个数量级的情况并不少见(例如,该补丁的自定义仪器显示,当运行回归测试时,这种情况相当频繁地发生)。添加了进一步的增强功能,该功能可以增强索引中的简单删除和自下而上的删除,这些索引利用了去重:教会 nbtree 的bt_delitems_delete() 函数支持 posting list 元组中的粒度 TID 删除。现在可以从 posting list 元组中删除单个 TID,前提是 TID 的 tableam 块号是删除过程中访问的表块(表块的访问可以由直接或间接触发)。将 posting list 元组的 LP_DEAD 位设置为零仍然是全有或全无的事情,但现在这无关紧要了,因为删除只需要首先有一个正确的总体想法,即哪些索引元组是可删除的。由于 xl_btree_delete 发生了变化,XLOG_PAGE_MAGIC 被提升。BTREE_VERSION 没有提升,因为 nbtree 索引的磁盘表示没有变化。在 PostgreSQL 12 或 PostgreSQL 13 上构建的索引将在 pg_upgrade 后自动受益于自下而上的索引删除(即无需重新索引)。简单删除的增强功能在 pg_upgrade 后可用于所有 B-Tree 索引,无论用户从哪个 PostgreSQL 版本升级。Author: Peter Geoghegan pg@bowt.ie Reviewed-By: Heikki Linnakangas hlinnaka@iki.fi Reviewed-By: Victor Yegorov vyegorov@gmail.com Discussion: 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 来覆盖。此 bug 自 7b504eb282c(添加扩展统计信息)以来就存在,因此回溯到 PostgreSQL 10。Author: Tomas Vondra Reported-by: Dean Rasheed Backpatch-through: 10 Discussion: https://postgr.es/m/CAEZATCXAPrrOKwEsyZKQ4uzzJQWBCt6QAvOcgqRGdWwT1zb%2BrQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/c9a0dc34865f2f82d8e186f534d9b605afaa4d11
psql \dX:列出扩展统计信息对象。新命令列出扩展统计信息对象,可能带有它们的大小。支持所有带有扩展统计信息的过往版本。Author: Tatsuro Yamada Reviewed-by: Julien Rouhaud, Alvaro Herrera, Tomas Vondra Discussion: 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 catalog 的用户有效,而大多数常规用户缺乏该权限(该 catalog 可能包含敏感用户数据)。Reported-by: Noriyoshi Shinoda Discussion: 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,因此遇到此 bug 需要一个在其创建脚本中建立此类 ACL 的扩展。没有 PGXN 扩展这样做。如果安装遇到了 bug,pg_dump 将省略分号,导致 REVOKE 和下一个 SQL 语句失败。另外,由于受影响的代码是为了消除整个 aclitem,它需要普通的 REVOKE,而不是 REVOKE GRANT OPTION FOR。回溯到 9.6,commit 23f34fa4ba358671adab16773e79c17c92cbc870 首次出现。Discussion: https://postgr.es/m/20210109102423.GA160022@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/f713ff7c646e5912e08089de74dacdfaaac3d03b
防止 SimpleLruTruncate() 过度删除。除了 pg_notify 外,每个核心 SLRU 都会环绕。环绕点可能位于页面中间。在 PagePrecedes 回调的规范以及 SimpleLruTruncate() 使用该回调时,要考虑到这一点。更新每个回调实现以适应新规范。这会将 SerialPagePrecedesLogically() 的风格从 asyncQueuePagePrecedes() 改为 CLOGPagePrecedes() 风格。(虽然 pg_clog 和 pg_serial 共享一个密钥空间,但 pg_serial 与 pg_notify 完全不同。)此 bug 修复的症状和用户后续步骤与 592a589a04bd456410b853d86bd05faa9432cbbb 相同。回溯到 9.5(所有支持的版本)。由 Andrey Borodin 和(在早期版本中)Tom Lane 审阅。Discussion: https://postgr.es/m/20190202083822.GC32531@gust.leadboat.com https://git.postgresql.org/pg/commitdiff/6db992833c04c0322f7f34a486adece01651f929
Jeff Davis 推送
Andrey V. Lepikhov 发送了对一个补丁的又一次修订,旨在移除一类可以安全移除的冗余自连接。
Tom Lane 发送了一个旨在修复一个 bug 的补丁,该 bug 在连接字符串中的多个主机未能以非热备用模式进行故障转移时出现,通过修复一些连接的重试和错误逻辑。
David Fetter 发送了对一个将 popcount 暴露给 SQL 的补丁的又一次修订。
Andrey V. Lepikhov 发送了对一个向 FDW API 添加批量插入接口并将其用于 PostgreSQL FDW 的补丁的又一次修订。这应该会加快对带有 foreign 分区的表的批量加载速度。
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 和 visibility map bits 的补丁修订。
Masahiko Sawada 发送了一个实现缓冲区加密的补丁,以确保 kms 补丁能够与其他使用 kmgr 管理的加密密钥的组件协同工作。
Simon Riggs 发送了对实现系统版本化时间表表的补丁的又一次修订。
Ian Barwick 发送了一个补丁,用于修复 has_column_privilege() 对 attnums 和不存在列的处理。它通过确认列是否存在来确认用户即使拥有表级权限,否则该函数将在提供无效 attnum 时愉快地报告用户对已删除或不存在的列拥有权限。
Yugo Nagata 发送了另一个版本的补丁,用于实现增量视图维护。
Atsushi Torikoshi 发送了另一个关于将计划类型(通用或自定义)添加到 pg_stat_statements 的补丁修订。
Peter Smith 发送了另外两个关于使 background workers 可用于 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 的行为,通过安排当 entry 在 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 并使 autoanalyze 记录的详细信息与 autovacuum 的详细信息保持一致的补丁修订。
Michaël Paquier 和 Aleksey Kondratov 交换了重构实用语句选项的补丁。
Peter Eisentraut 发送了对 pageinspect 的另一个修订,该修订将块号参数更改为 bigint 以避免可能的溢出。
Tomáš Vondra 发送了三个后续的补丁修订版,以实现 BRIN 多范围索引。
Heikki Linnakangas 发送了另外两个补丁修订,用于出于安全和清晰性考虑将一些 ResourceOwnerEnlarge() 调用移位,并通过使用单个数组和哈希(而不是每种对象类型一个)使 resowners 更易于扩展。
Kyotaro HORIGUCHI 发送了一个补丁,用于修复 RelationNeedsWAL 的一些错误用法。
Dilip Kumar 发送了另一个关于确保 pg_is_wal_replay_paused 等待恢复暂停的补丁修订。
Kyotaro HORIGUCHI 发送了另一个补丁修订,用于将统计信息收集器的临时存储从文件移至共享内存。
Kyotaro HORIGUCHI 发送了另一个补丁修订,用于通过添加 CatCache 过期功能来防止 syscache 因负缓存条目而膨胀。
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 发送了一个补丁,用于在计算要删除的元组的 Xid horizon 时,让 VACUUM 忽略正在进行 CIC 和 RC 的进程。
Álvaro Herrera 发送了一个补丁,用于增加 pg_commit_ts 缓冲区的大小。
David Zhang 发送了一个补丁,用于更新表空间文档,使其与 pgbench 的新表访问方法选项保持一致。
Iwata Aya 发送了另一个关于启用 libpq 跟踪的补丁修订。
Tomáš Vondra 发送了另外两个关于覆盖带扩展统计信息的表达式的补丁修订。
Tom Lane 发送了一个补丁,用于修复 pull_varnos() 中的错误计算。
Thomas Munro 发送了另一个关于使 pgbench 能够延迟查询直到连接建立的补丁修订。