本周人物:https://postgresql.life/post/corey_huinker/
https://archives.postgresql.org/pgsql-jobs/2021-03/
Planet PostgreSQL:https://planet.postgresql.org/
本周的 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间(PST8PDT)星期日下午 3:00 前将新闻和公告提交至 david@fetter.org。
Amit Kapila 推送了
跟踪回滚的复制源进度。提交 1eb6d6527a 允许跟踪 2PC 的副本源重放进度,但它并不完整。它未能正确跟踪回滚准备的进度,尤其是在恢复方面缺少代码更新。此外,我们需要允许在 wal_level 可能不是逻辑的订阅者节点上跟踪它。需要跟踪在 PG14 (a271a1b50e) 中提交的 2PC 解码,而且到目前为止没有人对此抱怨,因此不进行向后移植。作者:Amit Kapila。审核人:Michael Paquier 和 Ajin Cherian。讨论:https://postgr.es/m/CAA4eK1L-kHmMnSdrRW6UhRbCjR7cgh04c+6psY15qzT6ktcd+g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8a812e5106c5db50039336288d376a188844e2cc
为 "INSERT INTO ... SELECT ..." 启用并行 SELECT。在以下情况下,并行 SELECT 不能用于 INSERT: - INSERT 语句使用 ON CONFLICT DO UPDATE 子句 - 目标表具有并行不安全的:触发器、索引表达式或谓词、列默认表达式或检查约束 - 目标表的任何列上都有并行不安全的域约束 - 目标表是具有并行不安全的分区键表达式或支持函数的分区表。更新了规划器,以针对上面列出的情况执行额外的并行安全性检查,以确定在底层并行 SELECT 的情况下,是否可以安全地以并行模式运行 INSERT。如果从额外的并行安全性检查或现有的 SELECT 并行安全性检查中没有发现任何不安全的内容,规划器将考虑为 "INSERT INTO ... SELECT ..." 使用并行 SELECT。在检查并行安全性时,我们需要检查表中所有分区的情况,这可能会很耗时,尤其是在我们决定不使用并行计划时。因此,在单独的补丁中,我们将引入一个 GUC 或 reloption 来启用/禁用 Insert 语句的并行性。在为执行带有并行 SELECT 的 INSERT 进入并行模式之前,会获取一个 TransactionId 并将其分配给当前事务状态。这是必要的,以防止 INSERT 在并行模式下尝试分配 TransactionId,这是不允许的。这种方法有一个缺点,即如果底层的 SELECT 没有返回任何行,则不会使用 TransactionId,但在实践中,在很多情况下不应该发生这种情况。作者:Greg Nancarrow、Amit Langote、Amit Kapila。审核人:Amit Langote、侯志杰、津川隆幸、Antonin Houska、Bharath Rupireddy、Dilip Kumar、Vignesh C、俞志红、Amit Kapila。测试人:唐海英。讨论:https://postgr.es/m/CAJcOf-cXnB5cnMKqWEp2E2z7Mvcd04iLVmV=qpFJrR3AcrTS3g@mail.gmail.com 讨论:https://postgr.es/m/CAJcOf-fAdj=nDKMsRhQzndm-O13NY4dL6xGcEvdX5Xvbbi0V7g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/05c8482f7f69a954fd65fce85f896e848fc48197
修复提交 05c8482f7f 中的 valgrind 问题。通过 is_parallel_safe() 初始化 max_parallel_hazard_context 中其他新添加的变量,因为我们没有在该函数中检查目标关系的并行安全性。报告人:Tom Lane,根据 buildfarm。作者:Amit Kapila。讨论:https://postgr.es/m/2060179.1615347455@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e4e87a32cc5559303068b148bd4aa6a39b8f44a1
修复提交 05c8482f7f 引入的 relcache TriggerDesc 字段的使用。该提交添加了使用跨另一个缓存访问的 relcache TriggerDesc 字段的代码,这不应该发生,因为 relcache 不保证它不会被移动。诊断人:Tom Lane。作者:Greg Nancarrow。审核人:侯志杰、Amit Kapila。讨论:https://postgr.es/m/2309260.1615485644@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e2cda3c20a61c76e497fb2ebb6d2b2ae8c43c014
修复提交 d6ad34f3 和 bea449c6 中引入的计算中的大小溢出。报告人:Thomas Munro。作者:津川隆幸。审核人:堀口京太郎。讨论:https://postgr.es/m/CA+hUKG+oPoFizjABt=GXZWTEHx3oev5rAe2scjW2r6F1rguo5w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/519e4c9ee21a656879123f4843f1d8d60cb71536
改进 05c8482f7f 添加的 FK 触发器并行安全性检查。提交 05c8482f7f 添加了与 FK 触发器的并行安全性相关的特殊逻辑。这有点像黑客行为,应该通过简单地在这些触发器函数本身上设置适当的 proparallel 值来完成。建议人:Tom Lane。作者:Greg Nancarrow。审核人:Amit Kapila。讨论:https://postgr.es/m/2309260.1615485644@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c5be48f092016b1caf597b2e21d588b56c88a23e
Tom Lane 推送了
进一步调整 regex DFA 的内存管理。在提交 190c79884 之后,Coverity 仍然不满意,仔细观察后,我认为它可能发现了问题。如果 v->err 设置为非零值,则 newdfa() 的调用者通常会退出,如果失败,newdfa() 会忠实地执行此操作。但是,如果我们在进入 newdfa() 之前 v->err 已经是非零值会怎么样?那么 newdfa() 可能会成功,调用者会立即泄漏其结果。我认为这种情况实际上不会发生,但是谓词“在调用 newdfa() 时 v->err 始终为零”似乎很难完全确定;有大量的代码可能会出错。调整调用者以直接检查空结果,而不是依赖 ISERR() 测试,似乎更好。无论如何,这比以前的编码稍微便宜一些。由于没有证据表明存在任何真正的错误,因此不向后移植。https://git.postgresql.org/pg/commitdiff/6c20bdb2a279086777a3595ab00bcf14671fc5a1
验证 pg_import_system_collations() 的 OID 参数。"SELECT pg_import_system_collations(0)" 导致断言失败。使用随机非零参数---或者实际上在非断言构建中使用零---它会很乐意创建带有 collnamespace 垃圾值的 pg_collation 条目。就我所知,这些是无害的(除非也许 OID 碰巧在以后用于模式?)。无论如何,这不是安全问题,因为该函数仅限超级用户使用。但对于粗心的 DBA 来说,这似乎是一个陷阱,所以让我们添加一个检查,以确保给定的 OID 属于某个模式。向后移植到引入此函数的 v10。https://git.postgresql.org/pg/commitdiff/5c06abb9b97b69513a3998cccf89556e73052e02
正确地将 pg_stat_get_subscription() 标记为返回集合。此函数的初始目录数据未能设置 proretset 或提供 prorows 估计值。当在 FROM 子句中调用时,它意外地正常工作了,因为执行器对此不太挑剔;但是规划器不希望该函数返回多行,这可能会导致错误的计划。此外,如果该函数在 SELECT 列表中调用,则会失败。我们不能轻易地向后移植此修复,但幸运的是,在大多数情况下,该错误的后果并不严重。正确地处理此问题主要是为了面向未来。讨论:https://postgr.es/m/1636062.1615141782@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/fed10d4eec79242688382d03ddca82007160ee6f
如果 FROM 中的函数不应该返回集合却返回了,则发出抱怨。如果 FROM 中的函数尝试返回集合,但未标记为 proretset,则会抛出“函数协议违规”错误。尽管目前这些情况有效,但我们似乎不希望保证它会继续工作。此外,不设置 proretset 标志还会带来其他负面后果,例如可能会出现错误的计划。不向后移植,因为如果有任何第三方代码违反此期望,人们不会希望我们在次要版本中破坏它。讨论:https://postgr.es/m/1636062.1615141782@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/d4545dc19b8ea670bf62e06d22b0e4e6fcb45153
文档:修复了对过程 OUT 参数的遗漏提及。提交 2453ea142 中的一个小疏忽。https://git.postgresql.org/pg/commitdiff/3ebc6d295705fec37dc8f57a4ece54b370f55f72
文档:改进有关过程的介绍性信息。通过在项目符号列表中列出函数和过程之间的主要区别,阐明“用户定义的过程”中的讨论。值得注意的是,这避免了隐藏有关过程能够进行事务控制的先机。使 CREATE FUNCTION 参考页中的反向链接更加突出,并在 CREATE PROCEDURE 中添加一个。根据 Guyren Howe 的抱怨。感谢 David Johnston 的讨论。讨论:https://postgr.es/m/BYAPR03MB4903C53A8BB7EFF5EA289674A6949@BYAPR03MB4903.namprd03.prod.outlook.com https://git.postgresql.org/pg/commitdiff/227338b00d498d9e1c5705a1ab118585e5d57c87
文档:移除 <foreignphrase> 标签。我们用斜体标记了部分 “per se”、“pro forma” 和 “ad hoc”,但并非全部。这些短语在正式英语中很常见,因此它们是否算是外来语还存在争议。我们可以尝试更一致地使用 <foreignphrase>,但这很难强制执行,所以我们直接移除这些词的标签。唯一看起来应该保留标签的情况是 “voilà”。与其只保留一个标签实例,不如将其更改为更标准的短语。John Naylor 讨论:https://postgr.es/m/CAFBsxsHtWs_NsccAVgQ=tTUKkXHpHdkjZXtp_Cd9dGWyBDxfbQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/b12436340adf27aa3d334c92579e6662dd3090ce
避免为继承的 FK 约束创建重复的缓存计划。当外键约束应用于分区表时,每个叶子分区都会继承类似的 FK 约束。我们之前是独立处理所有这些约束的,这意味着在大型分区树中,我们会建立大量的缓存 FK 检查查询计划。然而,除了一个例外,所有情况下生成的查询对于继承树的所有成员实际上都是相同的(因为在大多数情况下,查询仅提及 FK 关系另一侧的最顶层表)。因此,我们可以在所有分区之间共享一个缓存计划,从而节省内存,更不用说构建和维护缓存计划的时间了。 Keisuke Kuroda 和 Amit Langote 讨论:https://postgr.es/m/cab4b85d-9292-967d-adf2-be0d803c3e23@nttcom.co.jp_1 https://git.postgresql.org/pg/commitdiff/c3ffe34863688115dd7878f118f2a123bafd8a26
重新简化 pqParseInput3 子例程中 inStart 的管理。提交 92785dac2 将一些与 inStart 前进相关的逻辑从 pqParseInput3 复制到了 getRowDescriptions 和 getAnotherTuple 中,因为它希望允许用户定义的行处理器回调函数可能会从库中 longjmp 出去,并且必须在此之前更新 inStart 以避免无限循环。我们后来认为该 API 非常脆弱并将其还原了,但我们没有撤销所有相关的代码更改,并且这一混乱仍然存在。现在撤销它,以便在 pqParseInput3 的处理中只有一个地方会前进 inStart;这将简化添加更好的跟踪支持。 getParamDescriptions 在某个时候也增长了类似的处理(不是在 92785dac2 中;我没有追踪到具体时间),但它实际上有错误,因为它对损坏消息的处理似乎是从 v2 逻辑中复制的,当时我们缺少已知消息长度。我们 “goto not_enough_data” 的情况不应简单地返回 EOF,因为这样我们就不会消耗该消息,可能会创建一个无限循环。这种情况现在表示一个绝对损坏的消息,我们应该将其报告为错误。尽管没有发现 getParamDescriptions 陷入循环的现场报告,但将此修复程序向后移植似乎是合适的。我选择向后移植所有这些,以使逻辑在支持的分支中看起来更相似。讨论:https://postgr.es/m/2217283.1615411989@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/51c54bb603098416dc6f9d9d46a3d14861f8fc38
禁止将标识列标记为可为空。GENERATED ALWAYS AS IDENTITY 暗示 NOT NULL,但如果你使用 “GENERATED ALWAYS AS IDENTITY NULL” 覆盖它,代码将无法报错。有人可能认为旧的行为是一个特性,但它不一致,因为结果会根据子句的顺序而变化,因此它似乎只是一个疏忽。根据 Pavel Boev 的错误 #16913。向后移植到引入标识列的 v10。Vik Fearing(我做了少量调整)讨论:https://postgr.es/m/16913-3b5198410f67d8c6@postgresql.org https://git.postgresql.org/pg/commitdiff/f52c5d6749a61fc4e0908457c58f5069910d53a6
修复 psql \e 检测文件修改时的竞争条件。psql 的编辑命令通过检查修改时间戳的变化来判断用户是否编辑了文件。对于预先存在的文件,这可能没问题,但对于在命令中创建的临时文件,快速输入的用户可能会在 stat(2) 时间戳的 1 秒精度内保存并退出。在 Windows FAT 文件系统上,精度甚至更差,为 2 秒,使得竞争更容易发生。为了修复此问题,请尝试将临时文件的修改时间设置为两秒前。这不太可能失败,但反过来,竞争条件本身也不太可能发生,因此只需忽略任何错误。此外,我们不妨同时检查文件大小及其修改时间。虽然这是一个很难触发的错误,但为了确保用户的编辑不会丢失,仍然值得向后移植。Laurenz Albe,根据 Jacob Champion 的抱怨;基于 Jacob 和我自己的修复建议讨论:https://postgr.es/m/0ba3f2a658bac6546d9934ab6ba63a805d46a49b.camel@cybertec.at https://git.postgresql.org/pg/commitdiff/48d67fd897918c72e7cdf703d794056b88ed5725
pg_amcheck:继续尝试修复测试。修复测试中另一个非可移植的选项顺序示例。24189277f 中的疏忽。Mark Dilger 讨论:https://postgr.es/m/C37D28BA-3BA3-4776-B812-17F05F3472D8@enterprisedb.com https://git.postgresql.org/pg/commitdiff/9e294d0f34d6e3e4fecf6f190b48862988934cde
文档:添加关于如何运行 pg_amcheck 回归测试的注释。在这里,您需要做什么才能使 “make installcheck” 工作并不明显,因此请按照我们在其他地方使用的方式进行记录。https://git.postgresql.org/pg/commitdiff/58f57490facdec78119e5bab84229dbdc1d5ac6a
Michaël Paquier 推送
移除对 SSL 压缩的支持。PostgreSQL 从 e3bdb2d 开始禁用压缩,并且文档建议不要使用它。此外,OpenSSL 从 1.1.0 版本开始禁用 SSL 压缩,并且许多发行版在此之前很久就禁用了它。最新的 TLS 版本 TLSv1.3 在协议级别禁止压缩。此提交删除了该功能本身,删除了对 libpq 参数 sslcompression 的支持(出于与现有连接字符串的兼容性原因,该参数仍然列出,但会被忽略),并删除了 pg_stat_ssl 和事实上的 PgBackendSSLStatus 中的等效字段。请注意,除了通过配置删除激活压缩的功能外,前端和后端都主动禁用压缩,以避免本地配置的覆盖。为已弃用的 SSL 参数添加了一个 TAP 测试,以便在向后兼容后进行检查。提升目录版本。作者:Daniel Gustafsson 审核人:Peter Eisentraut,Magnus Hagander,Michael Paquier 讨论:https://postgr.es/m/7E384D48-11C5-441B-9EC3-F7DB1F8518F6@yesql.se https://git.postgresql.org/pg/commitdiff/f9264d1524baa19e4a0528f033681ef16f61b137
在 COPY 中添加对更多进度报告的支持。命令(TO 或 FROM)、其类型(文件、管道、程序或回调)以及 COPY FROM 中被 WHERE 子句排除的元组数量已添加到已有的进度报告中。“lines_processed” 列已重命名为 “tuples_processed”,以消除 CSV 和 BINARY COPY 情况下列的含义歧义,并使其与其他的目录进度视图更加一致。再次提升目录版本。作者:Matthias van de Meent 审核人:Michael Paquier,Justin Pryzby,Bharath Rupireddy,Josef Šimánek,Tomas Vondra 讨论:https://postgr.es/m/CAEze2WiOcgdH4aQA8NtZq-4dgvnJzp8PohdeKchPkhMY-jWZXA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9d2d45700928d49212fb7ed140feeaebe3a6014f
将 sslcompression 切换回 libpq 中的普通输入字段。根据 buildfarm 成员 crake 的说法,任何包含设置了此选项的 postgres_fdw 服务器的服务器都将无法正确执行 pg_upgrade,因为该选项在 f9264d1 中被隐藏为调试选项,从而导致 FDW 服务器的还原失败。这会将 libpq 中的选项改回可见,但仍处于非活动状态以解决此升级问题。讨论:https://postgr.es/m/YEbq15JKJwIX+S6m@paquier.xyz https://git.postgresql.org/pg/commitdiff/096bbf7c934a4288c9e48a6ac8e91d8753ac1ccd
还原 libpq 中 SSL 压缩的更改。这部分还原了 096bbf7 和 9d2d457,撤销了 libpq 的更改,因为它可能会导致在多个 Postgres 主要版本中共享一个 libpq 版本的扩展和应用程序出现问题。请注意,后端在此处没有更改,它仍然禁用 SSL 压缩,同时简化了跟踪 SSL 连接是否启用压缩的底层目录。根据与 Tom Lane 和 Daniel Gustafsson 的讨论。讨论:https://postgr.es/m/YEbq15JKJwIX+S6m@paquier.xyz https://git.postgresql.org/pg/commitdiff/0ba71107efeeccde9158f47118f95043afdca0bb
将表空间路径重新创建从 makefiles 移动到 pg_regress。将此逻辑移至 pg_regress 可以修复并行测试中 pg_upgrade 和主回归测试套件都触发 makefile 规则的潜在故障,该规则清理了 src/test/regress 下的 testtablespace/。即使 pg_upgrade 触发了此规则,它也没有必要这样做,因为它使用了不同的表空间路径。因此,如果 pg_upgrade 在主回归测试套件运行表空间案例时触发了表空间设置的 makefile 规则,则会导致失败。 61be85a 是类似的尝试来实现这一目标,但这破坏了回归测试需要在管理员帐户下运行的情况,例如 Appveyor。报告者:Andres Freund,Kyotaro Horiguchi 审核人:Peter Eisentraut 讨论:https://postgr.es/m/20201209012911.uk4d6nxcnkp7ehrx@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/6c788d9f6aadb41d76a72d56149268371a7895ee
为 libpq 中所有连接线程设置 libcrypto 回调。基于对 Jacob 参与的 OpenSSL 代码的分析,将加密哈希计算迁移到 EVP 需要设置 libcrypto 回调,而这些回调之前仅为 SSL 连接设置,非 SSL 连接则没有设置。如果在加密哈希计算期间发生故障,不设置回调会导致使用线程的连接(在身份验证期间调用加密哈希,例如 MD5 或 SCRAM)存在潜在的不安全性。然后,设置 libssl 和 libcrypto 状态的逻辑被分为两个部分,两者都使用相同的锁,libcrypto 为 SSL 和非 SSL 连接设置,而 SSL 连接则在需要时设置任何 libssl 状态。在此提交之前,只有 SSL 连接会设置 libcrypto 回调,这些回调对于确保在 libpq 中使用多个并发线程时进行正确的线程锁定是必要的 (ENABLE_THREAD_SAFETY)。请注意,这仅对于 OpenSSL 1.0.2 和 1.0.1(HEAD 上支持的最旧版本)是必需的,因为 1.1.0 有其自己的内部锁定,并且已放弃对 CRYPTO_set_locking_callback() 的支持。使用 OpenSSL 1.0.1 和 1.0.2,混合 SSL 和非 SSL 连接线程进行的最多 300 个线程的测试,在进行一些微基准测试后没有显示任何性能影响。可以使用 pgbench 并使用 -C 和一个几乎为空的脚本(例如,使用一个 \set 元命令)来强调身份验证请求,并且我们将其与一些用于测试的自定义程序混合使用。报告者:Jacob Champion 作者:Michael Paquier 审阅者:Jacob Champion 讨论:https://postgr.es/m/fd3ba610085f1ff54623478cf2f7adf5af193cbb.camel@vmware.com https://git.postgresql.org/pg/commitdiff/2c0cefcd18161549e9e8b103f46c0f65fca84d99
Fujii Masao 推送
跟踪写入和同步 WAL 数据到磁盘的总时间。此提交添加了新的 GUC track_wal_io_timing。启用此选项后,XLogWrite 写入和 issue_xlog_fsync 同步 WAL 数据到磁盘的总时间将在 pg_stat_wal 中进行计数。此信息有助于检查 WAL 写入和同步对性能的影响。启用 track_wal_io_timing 会使服务器在每次写入或同步 WAL 时都向操作系统查询当前时间,这可能会在某些平台上造成显著的开销。为了避免在启用了 track_io_timing 的服务器中出现此类额外开销,此提交引入了 track_wal_io_timing 作为与 track_io_timing 分开的参数。请注意,walreceiver 的 WAL 写入和同步活动尚未跟踪。此提交使服务器还跟踪 XLogWrite 写入和 issue_xlog_fsync 同步 WAL 数据到磁盘的次数,无论 track_wal_io_timing 的设置如何,都在 pg_stat_wal 中。这些计数器可用于计算每个请求的 WAL 写入和同步时间等。增加 PGSTAT_FILE_FORMAT_ID。增加目录版本。作者:Masahiro Ikeda 审阅者:Japin Li,Hayato Kuroda,Masahiko Sawada,David Johnston,Fujii Masao 讨论:https://postgr.es/m/0509ad67b585a5b86a83d445dfa75392@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/ff99918c625a84c91e7391db9032112ec8653623
强制在 walwriter 退出时将剩余的 WAL 统计信息发送到统计收集器。在 walwriter 的主循环中,仅当自上次发送以来经过足够的时间以达到 PGSTAT_STAT_INTERVAL 毫秒时,才会发送 WAL 统计信息消息。这是避免统计收集器过载所必需的。但是,这可能会导致 walwriter 退出时未发送最近的 WAL 统计信息。为了确保发送所有 WAL 统计信息,此提交使 walwriter 在因关闭请求而退出时强制将剩余的 WAL 统计信息发送到收集器。请注意,当 walwriter 以非零退出代码退出(例如,FATAL 错误)时,这些剩余的 WAL 统计信息可能仍然不会发送。这没问题,因为该 walwriter 退出会导致服务器崩溃,并且随后的恢复会丢弃所有统计信息。因此,在这种情况下,无需发送剩余的统计信息。作者:Masahiro Ikeda 审阅者:Fujii Masao 讨论:https://postgr.es/m/0509ad67b585a5b86a83d445dfa75392@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/33394ee6f2433d3cc7785428a77cc9a813254df7
将关闭检查点期间收集的统计信息发送到统计收集器。当请求关闭时,检查点程序会执行检查点或重启点,并在退出之前更新统计信息。但是以前,检查点程序没有将这些统计信息发送到统计收集器。关闭检查点和重启点被视为请求的检查点和重启点,而不是计划的检查点和重启点,因此它们的数量在 pg_stat_bgwriter.checkpoints_req 列中进行计数。作者:Masahiro Ikeda 审阅者:Fujii Masao 讨论:https://postgr.es/m/0509ad67b585a5b86a83d445dfa75392@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/b82640df0062483431608b7e9e074255f03e6c02
Peter Eisentraut 推送
libpq:删除已弃用的连接参数 authtype 和 tty。authtype 参数已在提交 d5bbe2aca55bc8 中弃用并禁用,但环境变量仍然定义,因此即使该值没有用处,也会使用 getenv 调用对其进行测试。此外,如果它存在,则会被复制,但永远不会被释放,因为清理代码已被删除。tty 已在提交 cb7fb3ca958ec8bd5a14e7 中弃用,但围绕它的大部分基础设施仍然存在。作者:Daniel Gustafsson daniel@yesql.se 讨论:https://postgr.es/m/DDDF36F3-582A-4C02-8598-9B464CC42B34@yesql.se https://git.postgresql.org/pg/commitdiff/14d9b37607ad30c3848ea0f2955a78436eff1268
小调试消息调整。这使得删除情况的措辞与更新情况的措辞相匹配。https://git.postgresql.org/pg/commitdiff/1657b37d7cce5c35e4c1d500f0a2f3736a087d82
在 bsearch() 之前添加边界检查以提高性能。在当前的延迟清理实现中,某些索引 AM(例如 B 树索引)在 ambulkdelete 期间为每个索引元组调用 lazy_tid_reaped(),以检查索引元组是否指向(收集的)垃圾元组。在该函数中,我们只是简单地调用 bsearch(),但是如果索引元组指向超出收集的垃圾元组范围的堆元组,我们应该能够知道结果而无需 bsearch()。因此,在求助于 bsearch() 之前添加一个简单的边界检查。测试表明,这可以带来显着的性能优势。作者:Masahiko Sawada masahiko.sawada@2ndquadrant.com 讨论:https://postgresql.ac.cn/message-id/flat/CA+fd4k76j8jKzJzcx8UqEugvayaMSnQz0iLUt_XgBp-_-bd22A@mail.gmail.com
https://git.postgresql.org/pg/commitdiff/bbaf315309ed1194d451326cc8f4f59a45906408
Alexander Korotkov 推送
Thomas Munro 推送
pgbench:重构线程可移植性支持。与其为 Windows 维护不完整的 POSIX 线程模拟,不如现在使用一个基于宏的极简主义抽象。稍后的补丁将扩展此抽象,而无需提供更复杂的 pthread 模拟代码。(在以后的项目中可能需要更严肃的可移植线程抽象,但这并不是)。修复了一些偶然的小问题:使用 (pthread_t) 0 作为特殊值是不允许的,使用 == 比较 thread_t 值是不允许的,并且我们错误地假设 pthread 函数设置了 errno。讨论:https://postgr.es/m/20200227180100.zyvjwzcpiokfsqm2%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/b1d6a8f86813772b9198367a34c8ff8bff7fef9e
pgbench:改进时间逻辑。不再使用 instr_time (struct timespec) 和 INSTR_XXX 宏,而是引入 pg_time_usec_t 并使用整数算法。除非使用 -C 模式,否则不要将连接时间包含在 TPS 中,而是单独报告。作者:Fabien COELHO coelho@cri.ensmp.fr 审阅者:Kyotaro Horiguchi horikyota.ntt@gmail.com 审阅者:Hayato Kuroda kuroda.hayato@fujitsu.com 讨论:https://postgr.es/m/20200227180100.zyvjwzcpiokfsqm2%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/547f04e7348b6ed992bd4a197d39661fe7c25097
添加缺少的 pthread_barrier_t。为 macOS 提供缺少的 pthread_barrier_t 类型和函数的简单实现。讨论:https://postgr.es/m/20200227180100.zyvjwzcpiokfsqm2%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/44bf3d5083e151d772c5d6f656e3e162f573dced
pgbench:同步客户端线程。等待所有 pgbench 线程连接后,基准测试才会开始。这修复了一个问题,即某些连接可能由于早期连接的锁争用而需要很长时间才能建立,从而导致在高连接计数下结果不稳定且虚假。作者:Andres Freund andres@anarazel.de 作者:Fabien COELHO coelho@cri.ensmp.fr 审阅者:Marina Polyakova m.polyakova@postgrespro.ru 审阅者:Kyotaro Horiguchi horikyota.ntt@gmail.com 审阅者:Hayato Kuroda kuroda.hayato@fujitsu.com 审阅者:David Rowley dgrowleyml@gmail.com 讨论:https://postgr.es/m/20200227180100.zyvjwzcpiokfsqm2%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/aeb57af8e64000cc4288a7b8b8d7cf6040eae900
尝试修复最近 pgbench 提交中的可移植性错误。1. pg_time_usec_t 需要使用 INT64_FORMAT 而不是 %ld 打印,否则 32 位系统会报错(根据 lapwing)。2. 某些 Windows 编译器不喜欢未标记为 __stdcall
的线程函数(根据 whelk);让我们看看这是否修复了该问题。https://git.postgresql.org/pg/commitdiff/68b34b2338f013cb025dea360b37a3b4fc930179
修复最近 pgbench 提交中的另一个可移植性错误。提交 547f04e7 在构建 plpython 时在 AIX/xlc 上产生错误。新代码似乎与提交 a11cf433 安装的黑客不兼容。在无法访问 AIX 系统进行检查的情况下,我的猜测是,可能需要 _POSIX_C_SOURCE
才能使 <time.h> 声明头文件需要看到的内容,但 plpython.h 取消定义了它。现在,为了不破坏构建场动物 hoverfly,只需将新的 pg_time_usec_t 支持移到 pgbench.c 中即可。也许以后我们可以找出重新排列什么以将其放回头文件中以供更广泛的使用。讨论:https://postgr.es/m/CA%2BhUKG%2BP%2BjcD%3Dx9%2BagyTdWtjpOT64MYiGic%2Bcbu_TD8CV%3D6A3w%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/c427de427ac411039d5efd5d0dcc8a4e0c6da68d
用条件变量替换缓冲区 I/O 锁。1. 等待缓冲区 I/O 的后端现在可以中断。2. 如果当前正在执行 I/O 的后端出现问题,等待的后端将不再唤醒,直到该后端到达 AbortBufferIO() 并在 CV 上广播。之前,任何等待者都会被唤醒(因为 I/O 锁会自动释放),然后忙循环,直到 AbortBufferIO() 清除 BM_IO_IN_PROGRESS。3. 删除了 LWLockMinimallyPadded,因为它现在将不再使用。作者:Robert Haas robertmhaas@gmail.com 审核人:Thomas Munro thomas.munro@gmail.com 审核人:Julien Rouhaud rjuju123@gmail.com 审核人:Tom Lane tgl@sss.pgh.pa.us (早期版本,2016)讨论:https://postgr.es/m/CA%2BhUKGJ8nBFrjLuCTuqKN0pd2PQOwj9b_jnsiGFFMDvUxahj_A%40mail.gmail.com 讨论:https://postgr.es/m/CA+Tgmoaj2aPti0yho7FeEf2qt-JgQPRWb0gci_o1Hfr=C56Xng@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d87251048a0f293ad20cc1fe26ce9f542de105e6
改进 struct BufferDesc 的注释。添加一个说明,即每个缓冲区的 I/O 条件变量目前位于 BufferDesc 结构之外。这是对提交 d8725104 的后续操作。报告人:Julien Rouhaud rjuju123@gmail.com 讨论:https://postgr.es/m/20210311031118.hucytmrgwlktjxgq%40nol https://git.postgresql.org/pg/commitdiff/049d9b872db8a24b45709dbaed9a1051e92ed513
对 README.barrier 进行少量现代化改进。Itanium 非常罕见且正在被淘汰。ARM 无处不在。首选 ARM 作为具有弱内存排序的架构示例。https://git.postgresql.org/pg/commitdiff/43c66624964aa1d2f519ad6be0c5ea8f170cf357
为恢复添加条件变量。用 CV 替换睡眠循环,以便在恢复恢复或 postmaster 通过标准基础设施退出时获得快速响应时间。不幸的是,我们仍然需要每秒唤醒一次,以便在恢复暂停循环期间执行额外的轮询。讨论:https://postgr.es/m/CA%2BhUKGK1607VmtrDUHQXrsooU%3Dap4g4R2yaoByWOOA3m8xevUQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/600f2f50b7a57c8481276450c9019fa7b3656411
为 walreceiver 关闭添加条件变量。使用这个新的 CV 等待 walreceiver 关闭,而无需睡眠/轮询循环,同时还可受益于标准的 postmaster 死亡处理。讨论:https://postgr.es/m/CA%2BhUKGK1607VmtrDUHQXrsooU%3Dap4g4R2yaoByWOOA3m8xevUQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/de829ddf23f69190efb4e0178704c4c4228e17cd
在恢复中减少 postmaster 轮询频率。自从提交 9f095299 和 f98b8476 以来,我们在 Linux 和 FreeBSD 上的崩溃恢复期间根本不轮询 postmaster 管道,但在其他操作系统上,我们仍然为每个 WAL 记录执行此操作。在需要系统调用的操作系统上减少轮询频率,代价是在 postmaster 死亡后稍微延迟退出。这避免了昂贵的系统调用,据报告,这些系统调用会使 CPU 密集型恢复速度降低 10-30%。审核人:Heikki Linnakangas hlinnaka@iki.fi 审核人:Fujii Masao masao.fujii@oss.nttdata.com 审核人:Michael Paquier michael@paquier.xyz 讨论:https://postgr.es/m/CA%2BhUKGK1607VmtrDUHQXrsooU%3Dap4g4R2yaoByWOOA3m8xevUQ%40mail.gmail.com 讨论:https://postgr.es/m/7261eb39-0369-f2f4-1bb5-62f3b6083b5e@iki.fi https://git.postgresql.org/pg/commitdiff/57dcc2ef3320de3e1aef6f668601e6ad2bdf88c4
专门化检查点排序函数。在对可能大量脏缓冲区进行排序时,检查点可以从更快的排序例程中受益。据报告,在一个大型缓冲池系统上,改进为 1.4 秒 -> 0.6 秒。审核人:Andres Freund andres@anarazel.de 讨论:https://postgr.es/m/CA%2BhUKGJ2-eaDqAum5bxhpMNhvuJmRDZxB_Tow0n-gse%2BHG0Yig%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/1b88b8908e751271933c076234fa085cda251421
修复新的 pthread 代码以遵守 --disable-thread-safety。如果在配置时选择不使用线程,则不要尝试编译 src/port/pthread_barrier_wait.c。由构建场成员 gaur 发现,由于其 pthread 实现存在问题,它无法编译此代码。它不应该尝试编译,因为它使用了 --disable-thread-safety。提交 44bf3d50 中的缺陷。报告人:Tom Lane tgl@sss.pgh.pa.us 讨论:https://postgr.es/m/2568537.1615603606%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/de91c3b976cfacddacd45a9b52046264c0e44b11
Bruce Momjian 推送
C 注释:改进 GiST NSN 和 GistBuildLSN 的描述。GiST 索引很复杂,因此在代码中添加更多细节可能会有所帮助。讨论:https://postgr.es/m/20210302164021.GA364@momjian.us https://git.postgresql.org/pg/commitdiff/845ac7f847a25505e91f30dca4e0330b25785ee0
教程:陆地高度是“海拔”,而不是“高度”。这是对 92c12e46d5 的后续补丁。在该补丁中,我们根据以下详细信息将文档中的“高度”重命名为“海拔”:https://mapscaping.com/blogs/geo-candy/what-is-the-difference-between-elevation-relief-and-altitude 这将教程 SQL 文件重命名以匹配文档。报告人:max1@inbox.ru 讨论:https://postgr.es/m/161512392887.1046.3137472627109459518@wrigleys.postgresql.org 向后移植至:9.6 https://git.postgresql.org/pg/commitdiff/2950ff32f31d073ea4be4f5f9b73249131f42bd7
Peter Geoghegan 推送
在 nbtree VACUUM 中不考虑新插入的元组。删除 nbtree VACUUM 中“过时的统计信息”的整个概念(停止关心涉及插入元组数量的统计信息)。还删除了主分支上的 vacuum_cleanup_index_scale_factor GUC/参数(尽管只是在 postgres 13 上禁用它们)。vacuum_cleanup_index_scale_factor/统计信息接口使 nbtree AM 部分负责决定何时需要更新 pg_class.reltuples 统计信息。这似乎有悖于索引 AM API 的精神,尽管如此——对于索引 AM 的批量删除和清理回调来说,在不方便时提供准确的统计信息实际上没有必要。核心代码拥有该权限。(索引 AM 有权根据自己的考虑执行或不执行某些类型的延迟清理,例如页面删除和回收,但这与 pg_class.reltuples/num_index_tuples 几乎没有关系。)直到提交 b07642db 引入 autovacuum_vacuum_insert_threshold 功能之前,这个问题都是相当无害的,它与 vacuum_cleanup_index_scale_factor 机制有不希望的交互:它使插入驱动的自动清理执行完整的索引扫描,即使这样做没有真正的好处。这与一个仅附加插入基准测试 [1] 的回归有关。此外,在仅清理的 nbtree VACUUM 期间执行索引完整扫描的剩余情况表明,最终的元组计数只是一个估计值。这可以防止 vacuumlazy.c 在这些情况下设置索引的 pg_class.reltuples(它现在仅在 vacuumlazy.c 具有 nbtree 用于批量删除的 TID 时才更新 pg_class)。这可以说修复了重复数据删除相关修复提交 48e12913 中的疏忽。[1] https://smalldatum.blogspot.com/2021/01/insert-benchmark-postgres-is-still.html 作者:Peter Geoghegan pg@bowt.ie 审核人:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/CAD21AoA4WHthN5uU6+WScZ7+J_RcEjmcuH94qcoUPuB42ShXzg@mail.gmail.com 向后移植:13-,其中添加了 autovacuum_vacuum_insert_threshold。https://git.postgresql.org/pg/commitdiff/9f3665fbfc34b963933e51778c7feaa8134ac885
VACUUM ANALYZE:始终更新 pg_class.reltuples。vacuumlazy.c 有时无法更新每个索引的 pg_class 条目(以确保 pg_class.reltuples 是最新的),即使 analyze.c 假设这必须在 VACUUM ANALYZE 期间发生。至少有两个原因可以解释这一点。例如,vacuumlazy.c 在索引 AM 指出其统计信息只是一个估计值时,可能无法更新 pg_class,这符合 2006 年提交 e57345975cf 建立的 amvacuumcleanup() 例程的约定。停止假设 pg_class 必须在 VACUUM ANALYZE 中使用准确的统计信息进行更新——在所有情况下,都与表关系同时更新索引的 pg_class。这样,VACUUM ANALYZE 将永远不会无法保持 pg_class.reltuples 的合理准确性。这种方法(与旧方法相比)的唯一缺点是,它可能会为堆关系最终具有相同不准确值的索引不准确地设置 pg_class.reltuples。这似乎不太糟糕。我们已经在任何 VACUUM ANALYZE 期间一致地两次为堆/表关系调用 vac_update_relstats()(以更新 pg_class)——一次在 vacuumlazy.c 中,一次在 analyze.c 中。我们现在确保为每个索引至少调用一次(尽管通常是两次)vac_update_relstats()。这是对提交 9f3665fb 的后续工作,该提交处理了 btvacuumcleanup() 中的问题。从技术上讲,这修复了一个不相关的问题。在提交 9f3665fb 之后(当在有问题的 VACUUM 操作期间没有 btbulkdelete() 调用时),btvacuumcleanup() 不再提供准确的 num_index_tuples 值,但 hashvacuumcleanup() 多年来一直以相同的方式工作。作者:Peter Geoghegan pg@bowt.ie 审核人:Masahiko Sawada sawada.mshk@gmail.com 讨论:https://postgr.es/m/CAH2-WzknxdComjhqo4SUxVFk_Q1171GJO2ZgHZ1Y6pion6u8rA@mail.gmail.com 向后移植:13-,就像提交 9f3665fb 一样。https://git.postgresql.org/pg/commitdiff/5f8727f5a679452f7bbdd6966a1586934dcaa84f
文档:B 树只有一个附加参数。提交 9f3665fb 中的疏忽。向后移植:13-,就像提交 9f3665fb 一样。https://git.postgresql.org/pg/commitdiff/3f0daeb02f8dd605f89de9aa2349137c09cc7fb4
添加回 vacuum_cleanup_index_scale_factor 参数。提交 9f3665fb 删除了 vacuum_cleanup_index_scale_factor 存储参数。但是,在跨主要版本移动时,这会产生转储/重新加载的风险。添加回 vacuum_cleanup_index_scale_factor 参数(尽管不是同名的 GUC),纯粹是为了避免在使用 pg_upgrade 等工具时出现问题。该参数保持禁用和未记录状态。没有向后移植到 Postgres 13,因为 vacuum_cleanup_index_scale_factor 只是首先被 REL_13_STABLE 版本的 master 分支提交 9f3665fb 禁用的——该参数在 REL_13_STABLE 上已经看起来是这样的。讨论:https://postgr.es/m/YEm/a3Ko3nKnBuVq@paquier.xyz https://git.postgresql.org/pg/commitdiff/effdd3f3b633e88feaa675377075f02ecc99aee4
在 nbtree VACUUM 期间节省一些周期。在清理 nbtree VACUUM 操作期间,在没有删除但尚未回收的页面要回收的常见情况下,避免不必要地调用 RelationGetNumberOfBlocks()。这是对提交 e5d8a999 的后续操作,该提交(除其他外)教会了“跳过完整扫描” nbtree VACUUM 机制仅在索引中删除页面的绝对数量被认为过多时才触发完整的索引扫描。https://git.postgresql.org/pg/commitdiff/7bb97211a5589265f3f88183ae9353639ab184c6
整合 nbtree VACUUM 元页例程。简化 _bt_vacuum_needs_cleanup()
函数的签名(现在它只需要一个 'rel' 参数),并将其移动到 nbtpage.c 中其同级函数旁边。我认为 _bt_vacuum_needs_cleanup()
最初位于 nbtree.c 中是由于包含依赖问题。现在这不是问题了。提交 9f3665fb 的后续改进。https://git.postgresql.org/pg/commitdiff/02b5940dbea17d07a1dbcba3cbe113cc8b70f228
Robert Haas 推送了
重构和泛化 ParallelSlot 机制。创建一个包装器对象 ParallelSlotArray,用于封装槽的数量和槽数组本身,以及其他一些相关的信息。这减少了我们需要在各处传递的参数数量。允许 ParallelSlotArray 包含连接到单个集群中不同数据库的槽。此机制的当前客户端不需要此功能,但预计将在未来的补丁中使用。将连接到数据库的操作延迟到我们实际需要连接时才进行。这是 vacuumdb 和 reindexdb 的一个轻微行为更改。如果指定的作业数量大于对象的数量,则额外的连接现在不会被使用。但是,另一方面,如果指定的作业数量过大以至于会失败,则该失败以前会在任何操作实际开始之前发生,而现在不会发生。Mark Dilger,由我审核。讨论:http://postgr.es/m/12ED3DA8-25F0-4B68-937D-D907CFBF08E7@enterprisedb.com 讨论:http://postgr.es/m/BA592F2D-F928-46FF-9516-2B827F067F57@enterprisedb.com https://git.postgresql.org/pg/commitdiff/f71519e545a34ece0a27c8bb1a2b6e197d323163
明确说明恢复暂停是否已生效。以前,代码和文档似乎基本上假设调用 pg_wal_replay_pause() 会立即发生,但事实并非如此,因为我们只在某些地方检查暂停。这意味着一个使用此函数然后在之后想要执行其他依赖于暂停生效的操作的工具,不知道它需要等待多久才能确保不再回放任何 WAL。为避免这种情况,添加了一个新的函数 pg_get_wal_replay_pause_state(),它返回 “not paused”、“paused requested” 或 “paused”。调用 pg_wal_replay_pause() 后,状态会立即从 “not paused” 更改为 “pause requested”;当启动进程注意到这一点时,状态将更改为 “paused”。为了向后兼容,pg_is_wal_replay_paused() 仍然存在,并且返回与以前相同的内容:如果已请求暂停,则返回 true,无论是否已生效;如果未请求暂停,则返回 false。文档已更新以进行澄清。为了提高暂停请求快速确认生效的机会,调整了相关设置,以便在发出暂停请求时,WaitForWALToBecomeAvailable 将快速到达对 recoveryPausesHere() 的调用。Dilip Kumar,由 Simon Riggs、Kyotaro Horiguchi、Yugo Nagata、Masahiko Sawada 和 Bharath Rupireddy 审核。讨论:http://postgr.es/m/CAFiTN-vcLLWEm8Zr%3DYK83rgYrT9pbC8VJCfa1kY9vL3AUPfu6g%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/32fd2b57d7f64948e649fc205c43f007762ecaac
添加 pg_amcheck,一个用于 contrib/amcheck 的 CLI。这使得对大量关系运行 contrib/amcheck 实现的损坏检查,并以易于理解的格式获取结果变得容易得多。它有多种选项用于选择要检查的关系和要执行的检查,并且如果需要,它可以并行运行检查。Mark Dilger,由 Peter Geoghegan 和我审核。讨论:http://postgr.es/m/12ED3DA8-25F0-4B68-937D-D907CFBF08E7@enterprisedb.com 讨论:http://postgr.es/m/BA592F2D-F928-46FF-9516-2B827F067F57@enterprisedb.com https://git.postgresql.org/pg/commitdiff/9706092839db2c8c93860674e426a917635438c3
尝试修复编译器警告。根据 Peter Geoghegan 的报告。讨论:http://postgr.es/m/CAH2-WznpwULZ3uJ1_6WXvNMXYbOy8k8tYs3r=qSdGmZeRd6tDw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d60e61de4fb4a8e7ca88204c2c409e7380887d76
调整 perl 样式。根据 buildfarm 成员 crake 的报告。https://git.postgresql.org/pg/commitdiff/7a1527c02c147a4107490662cb1872524c54a8ae
将 PG_USED_FOR_ASSERTS_ONLY 移动到初始化器之前。Erik Rijkers 报告了一个编译失败,我认为这可能是原因。https://git.postgresql.org/pg/commitdiff/ac445955852fe6bc0e02e87a409f25ab6e0a82d6
修复 pg_amcheck 的 004_verify_heapam.pl 中的可移植性问题。测试 #12 覆盖了一个 1 字节的 varlena 标头,使其看起来像一个 4 字节的 varlena 标头的初始字节,但结果取决于字节序。此外,被覆盖字节后的字节“abc”会根据字节序以不同的方式解释。以字节序感知的方式覆盖 4 个字节。测试 #13 意外地依赖了 TOAST_MAX_CHUNK_SIZE,它会根据 MAXIMUM_ALIGNOF 略有不同。无论如何,这都不是重点,因此请使正则表达式对预期的块数不敏感。Mark Dilger 讨论:http://postgr.es/m/A80D68F6-E38F-482D-9522-E2FB6AAFE8A1@enterprisedb.com https://git.postgresql.org/pg/commitdiff/661125612706b1d0d5ed9f12d18908b08512a7eb
尝试避免 IPC::Run 中明显的平台依赖性。难以置信,但来自新 pg_amcheck 的 buildfarm 结果表明 command_checks_all() 在某些机器上执行 shell 扩展,而在其他机器上则不执行,这显然是由于 IPC::Run 中存在的潜在行为差异。让我们看看是否可以通过将 '-S*' 作为单个参数而不是将 '-S' 和 '*' 作为两个单独的参数传递来解决该问题,并确认这是否是真正的问题。在 jacana 和 hoverfly 上观察到失败。Mark Dilger 讨论:http://postgr.es/m/9E76E46A-48B2-4869-BD0C-422204C1F767@enterprisedb.com https://git.postgresql.org/pg/commitdiff/f371a4cdba6dc805acd608cc63a7089b57cb4e9e
pg_amcheck:尝试修复更多的测试失败。避免在 command_checks_all() 中使用不可移植的选项顺序。在开关之前使用裸命令行参数并非在所有地方都有效。根据 buildfarm 成员 drongo 和 hoverfly 的报告。避免测试消息“角色“%s”不存在”,因为某些 buildfarm 机器报告不同的错误。例如,fairywren 会抱怨“用户“%s”的 SSPI 身份验证失败”。Mark Dilger 讨论:http://postgr.es/m/9E76E46A-48B2-4869-BD0C-422204C1F767@enterprisedb.com 讨论:http://postgr.es/m/F0A1FD70-A2F4-4528-8A03-8650CAEC0554%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/24189277f6ff3169b15c7bc82926a372ca7f2dbf
pg_amcheck:继续尝试修复测试。提交 24189277f6ff3169b15c7bc82926a372ca7f2dbf 成功删除了我们检查“没有此类用户”错误的两个位置之一,而将另一个位置保留在它旁边。所以也将其删除。事实上,删除整个测试,因为此测试的全部意义在于查看我们在失败时收到了哪个消息。https://git.postgresql.org/pg/commitdiff/b9164eab208342d685638fc90048ffaa2688cb47
在 pg_amcheck 测试中,不要依赖 perl 的 Q/q pack 代码。它并非在所有平台上的所有 perl 版本上都有效。为避免字节序问题,请为列 a 选择一个新值,该值具有与较低 4 个字节相同的较高 4 个字节。尝试使其成为不太可能在页面中任何附近出现的内容。讨论:http://postgr.es/m/29DA079B-0658-4E66-BDAA-0EFD7B64D9C6@enterprisedb.com https://git.postgresql.org/pg/commitdiff/945d2cb7d0255e296a55f3e9febb5dce6eaccc3e
Etsuro Fujita 发送了另一个补丁修订版,以实现 postgres_fdw 节点上的异步追加。
Kyotaro HORIGUCHI 发送了一个补丁,以在 wal_level=minimal 的情况下运行 011_crash_recovery.pl,并确保发布的 XID 是持久的。
Ibrar Ahmed 发送了另一个 pg_rewind 补丁修订版,该补丁修复了当服务器刚刚通过查看控制文件中的 minRecoveryPointTLI 以及检查点上的 ThisTimeLineID 来确定 TLI 的方式。
Ibrar Ahmed 发送了另一个补丁修订版,以将 popcount 公开到 SQL。
Kota Miyake 发送了另一个补丁修订版,通过要求 pgbench 的 \sleep 命令接受一个整数参数来修复其工作方式。
Michael Banck 发送了另一个补丁修订版,以添加一个新的 PGC_ADMINSET guc 上下文和 pg_change_role_settings 默认角色。
Andrey Borodin 发送了另一个补丁修订版,以添加用于对 gist_btree 类型进行 GiST 构建的 Sortsupport。
Pavel Stěhule 发送了一个补丁,为类型记录添加运算符 ? 和 ->>,以及函数 record_keys 和 record_each_text。
Ajin Cherian 发送了一个补丁,使 stream_prepare_cb 成为可选的,这允许插件不允许同时在逻辑复制中启用流式传输和两阶段提交。
Ibrar Ahmed 发送了另一个补丁修订版,以在规划时评估另外两种情况的表达式。
Joel Jacobson 发送了另外四个补丁修订版,以添加视图 pg_permissions 和 pg_ownerships,这大大简化了建立这些内容的查询。
Ibrar Ahmed 发送了另一个补丁修订版,以实现系统版本的时间表。
Tomáš Vondra 发送了另外两个补丁修订版,以实现 BRIN 多范围索引。
Tomáš Vondra 和 Stephen Frost 交换了补丁,以通过在启用 track_io_timing 的情况下包含 I/O 计时来改进自动清理和自动分析的日志记录。此外,对于自动分析,添加读取速率和脏速率,类似于历史上如何记录自动清理的信息。
Masahiro Ikeda 和 Fujii Masao 交换了补丁,以在关闭时发送 walwriter 和检查点器的统计信息。
Dilip Kumar 和 Justin Pryzby 交换了补丁,以实现表自定义压缩方法。
Bharath Rupireddy 发送了另一个补丁修订版,以实现 EXPLAIN [ANALYZE] REFRESH MATERIALIZED VIEW。
Greg Nancarrow 和 Hou Zhijie 交换了补丁,以实现并行 INSERT (INTO ... SELECT ...)。
Ibrar Ahmed 和 Kazutaka Onishi 交换了补丁,以在外部表上实现 TRUNCATE。
Peter Smith 和 Ajin Cherian 交换了补丁,以实现两阶段事务的逻辑解码。
Tatsuo Ishii 发送了两个补丁修订版,以使在 pgbench 中可以使用 COPY FREEZE。
Peter Smith 发送了一个补丁,让 tablesync 工作进程有机会查看它是否可以立即退出(因为它已经赶上),而无需先处理消息才能发现这一点。
Yugo Nagata 发送了另一个补丁修订版,以实现增量物化视图。
Arseny Sher 提交了一个补丁,增加了用于仅索引扫描的虚拟机缓存。
Peter Eisentraut 提交了另一个补丁修订版,为 SQL 语言添加了对编写 CREATE FUNCTION 和 CREATE PROCEDURE 语句的支持,该语句的函数体符合 SQL 标准,并且可以移植到其他实现。
Heikki Linnakangas 提交了另一个补丁修订版,为了安全性和清晰性,移动了一些 ResourceOwnerEnlarge() 调用,使 resowner 更易于扩展,并在可用时使用 64 位 murmur 哈希以加快速度。
Tomáš Vondra 提交了另一个补丁修订版,使用新的 GUC(remove_temp_files_after_crash)控制崩溃后临时文件的删除。
Jacob Champion 提交了两个补丁修订版,将客户端的 DN 存储在 port->peer_dn 中,并使用它从所有身份验证后端记录已验证的身份。
Joel Jacobson 提交了另一个补丁修订版,以实现 regexp_positions。
Justin Pryzby 提交了一个补丁,使 pg_dump 在 getBlobs 中使用游标,以缓解在存在数百万个大型对象的情况下使用大量内存的问题。
Tomáš Vondra 提交了另一个补丁修订版,以提高 GROUP BY 的效率。
Erica Zhang 提交了两个补丁修订版,为 contrib 下的 pg_stat_statements 兼容性验证添加了一些测试。
Matthias van de Meent 提交了三个补丁修订版,当页面的行指针数组具有尾随的未使用 ItemIds 时,对其进行截断。这将允许重用实际上空闲的空间来存储数据和新的行指针,而不是仅仅为行指针保留空间。另一个好处是,HasFreeLinePointers 提示位优化现在不会提示数组末尾有空闲行指针,稍微提高了空闲行指针位置的精确性;并且避免了我们需要搜索到数组末尾的情况(如果所有其他条目都已填充)。
Magnus Hagander 提交了另一个补丁修订版,以添加 PROXY 协议支持。
Floris Van Nee 提交了另一个补丁修订版,允许将元组插入几乎为空的页面。
Marcus Wanner 提交了一个补丁,为输出插件的 filter_prepare 回调添加了一个 xid 参数。
Kyotaro HORIGUCHI 和 Fujii Masao 交换了补丁,将统计收集器使用的临时存储从文件更改为共享内存。
Amul Sul 和 Ibrar Ahmed 交换了补丁,加入了一些机制,使得实现 ALTER SYSTEM READ {ONLY|WRITE} 成为可能。
Masahiko Sawada 提交了另一个补丁修订版,使 autovacuum 日志更具信息性。
Bharath Rupireddy 提交了另一个补丁修订版,为多重和单一插入添加新的表访问方法 (AM),并将其用于 CTAS、REFRESH MATERIALIZED VIEW 和 COPY。
Yuzuko Hosoya 提交了另一个补丁修订版,使用 DISCARD ALL 为引用完整性释放 SPI 计划。
John Naylor 提交了一个补丁,删除了文档中的 <foreignphrase>
标签。
John Naylor 提交了一个补丁,使 popcount xor 尝试在缓冲区级别进行间接寻址。
Masahiko Sawada 提交了一个补丁,从 vacuumlazy.c 中删除不必要的 bsearch。
Craig Ringer 提交了另一个补丁修订版,将目标 LWLock*
和 tranche ID 传递给 LWLock 跟踪点,添加到 LWLock 例程中的跟踪点,并为启动时的后端类型和 postmaster pid 添加 SDT 跟踪点。
Bharath Rupireddy 提交了两个补丁修订版,使 check_publication_add_relation 中的错误消息更具信息性和一致性。
Iwata Aya、Álvaro Herrera 和 Tom Lane 交换了补丁,为 libpq 添加跟踪功能。
David Rowley 提交了两个补丁修订版,用于缓存 PathTarget 和 RestrictInfo 的易变性,允许 estimate_num_groups() 返回有关估计的更多详细信息,允许 simplehash.h 的用户执行直接删除,添加 Result Cache 执行器节点,并删除 nodeResultCache.c 中的代码重复。
Nathan Bossart 和 Laurenz Albe 交换了补丁,以记录 ALTER ROLE ... SET ROLE。
Mark Dilger 和 Robert Haas 交换了补丁,添加了一个前端实用程序程序 pg_amcheck。
Peter Geoghegan 提交了另一个补丁修订版,以回收在同一 VACUUM 期间删除的页面。
Thomas Munro 提交了另一个补丁修订版,在共享内存中跟踪关系大小,为 smgrnblocks() 提供无锁快速路径,并将 fifo 更新为 lru 以清除有效缓存。
Thomas Munro 提交了一个补丁,通过使用 pg_procno 而不是扫描 ProcArray 并跟踪启动进程,使 ProcSendSignal() 更加高效。
Hou Zhijie 提交了另一个补丁修订版,避免在执行引用表的 INSERT INTO 时在 RI 触发器中执行 CommandCounterIncrement。
Álvaro Herrera 提交了另一个补丁修订版,以实现 ALTER TABLE ... DETACH PARTITION CONCURRENTLY。
Álvaro Herrera 提交了两个补丁修订版,以实现 libpq 的批处理/流水线支持。
Fabien COELHO 和 Dean Rasheed 交换了补丁,向 pgbench 添加了一个伪随机排列函数。
Bruce Momjian 提交了另一个补丁修订版,以添加密钥管理。
Takayuki Tsunakawa 提交了另一个补丁修订版,以加速 COPY FROM 到具有外部分区表的进程。
Hao Wu 提交了一个旨在修复以下错误的补丁:在节点升级后 HotStandbyActive() 返回 true。
Takayuki Tsunakawa 提交了两个补丁修订版,以修复在计数要失效的缓冲区数量时发生的溢出。
Andrey Borodin 提交了另一个补丁修订版,使所有 SLRU 缓冲区大小可配置。
Tom Lane 提交了两个补丁修订版,以清理 PL/pgsql 中变量用法的文档。
Thomas Munro 提交了另一个补丁修订版,在崩溃恢复中运行检查点进程和后台工作进程,在崩溃恢复后记录缓冲区统计信息,并使其可以不等待恢复结束的检查点。
Justin Pryzby 提交了两个补丁修订版,以允许 wal_compression 的替代压缩方法。
Mark Rofail 和 Justin Pryzby 交换了补丁,以实现外键数组。
Pavel Stěhule 提交了另一个补丁修订版,以实现架构变量。
Michaël Paquier 和 Soumyadeep Chakraborty 交换了补丁,以修复 PITR 和 2PC 之间的不协调。
Pavel Stěhule 提交了两个补丁修订版,为 PL/pgsql 添加 #routine_label pragma。
Thomas Munro 提交了一个补丁,向 sort_template.h 添加 bsearch 和 unique 模板,为一些常见的标量类型提供排序/搜索专业化,在明显的地方使用 qsort_oid() 及其友元,为 ItemPtrData 提供专门的排序/搜索例程,在各种地方使用 qsort_itemptr() 及其友元,专门为 ANALYZE 使用“编码”格式的 HeapTuple 排序例程,基于可以通过减法比较的 48 位整数,避免分支,专门化 tidbitmap.c 中的 pagetable 排序例程,专门化 nbtree 代码中的一些排序/搜索例程,并专门化 multixact.c 使用的排序例程。
Julien Rouhaud 提交了另一个补丁修订版,将 pg_stat_statements 查询打乱移动到核心,在 pg_stat_activity 和 log_line_prefix 中公开 queryid,并在详细的 explain 中公开查询标识符。
Dmitry Dolgov 提交了另一个补丁修订版,以引入跳跃扫描。
Julien Rouhaud 提交了另一个补丁修订版,为 REINDEX 命令添加新的 OUTDATED 过滤工具,并为 reindexdb 添加相应的 --outdated 选项。
Alexander Lakhin 提交了一个补丁,在 pgwin32_open 中使用 microsoft_native_stat。
Thomas Munro 提交了两个补丁修订版,用于在 Linux 上为 SyncDataDirectory() 可选地使用 syncfs()。