https://archives.postgresql.org/pgsql-jobs/2021-07/
Planet PostgreSQL:https://planet.postgresql.org/
本周 PostgreSQL 周报由 David Fetter 提供。
请在太平洋标准时间(PST8PDT)周日晚上3:00之前将新闻和公告发送至 david@fetter.org。
Michaël Paquier 提交
pageinspect: 改进 32kB 页的 page_header()。ld_upper、ld_lower、pd_special 和页面大小已使用 smallint 作为返回类型,在某些情况下,对于配置为 32kB 页面大小的构建,这可能导致这些字段返回负值。将 pageinspect 提升至 1.10。当使用较旧版本的扩展时,page_header() 能够处理这些字段的正确返回类型,并添加了一些测试来覆盖这种情况。作者:Quan Zongliang 审阅者:Michael Paquier, Bharath Rupireddy 讨论:https://postgr.es/m/8b8ec36e-61fe-14f9-005d-07bc85aa4eed@yeah.net https://git.postgresql.org/pg/commitdiff/127404fbe28455d6e8183fa58f3b7aefeba8f909
修复 Windows stat() 在处理待删除文件时的问题。bed9075 引入的代码通过 NtQueryInformationFile() 或 GetFileInformationByHandleEx() 来增强 Windows 上大于 4GB 文件大小的 stat() 实现,但未能正确检测待删除的文件,Alexander Lakhin 在其自定义 TAP 测试中证明了这一点。open() 实现中使用的通过 sleep 和循环来处理 ERROR_ACCESS_DENIED (EACCES) 失败的方法显示出更强的稳定性,因此切换到该方法。如果权限问题持续时间超过 1 秒的超时时间,仍可能导致问题,但这(希望)在性能关键路径中永远不会发生。尽管如此,为了提高处理重载机器的性能,增加超时时间可能是个好主意。请注意,WIN32 的 open() 现在使用 microsoft_native_stat(),因为它在处理并发文件删除问题时应与 stat() 类似。我花了一些时间使用 pgbench 结合 genfile.c 中的 SQL 函数进行测试,并运行了该主题中提供的 MSVC 构建的 TAP 测试,这看起来比以前的方法稳定得多。作者:Alexander Lakhin 审阅者:Tom Lane, Michael Paquier, Justin Pryzby 讨论:https://postgr.es/m/c3427edf-d7c0-ff57-90f6-b5de3bb62709@gmail.com Backpatch-through:14 https://git.postgresql.org/pg/commitdiff/54fb8c7ddf152629021cab3ac3596354217b7d81
撤销“修复 Windows stat() 在处理待删除文件时的问题”。此提交撤销了 commit 54fb8c7,因为 fairywren 报告了 MinGW 中由于缺少 microsoft_native_stat() 而出现的问题。仅对 MSVC 使用 stat() 不足以处理与待删除文件并发的问题。可能可以在代码中添加一些 MINGW64 标记来在此构建上下文中切换到不同的 stat() 实现,但我也不确定 MinGW 中 stat() 的实现是否足以解决我们试图解决的问题。因此,这需要进一步研究。讨论:https://postgr.es/m/YOvOlfRrIO0yGtgw@paquier.xyz Backpatch-through:14 https://git.postgresql.org/pg/commitdiff/2c9b46c090e76c62f24563b9be2c34e6b92e9329
正确安装 fe-auth-sasl.h。前端 SASL 回调的内部实现位于 libpq-int.h 中,但该头文件未被安装。这会导致应用程序使用 libpq 内部功能时编译失败。此问题由 9fd8557 引入。作者:Mikhail Kulagin 审阅者:Jacob Champion 讨论:https://postgr.es/m/05ce01d777cb$40f31d60$c2d95820$@postgrespro.ru https://git.postgresql.org/pg/commitdiff/6c9c2831668345122fd0f92280b30f3bbe2dd4e6
移除 postmaster.c 中不必要的断言。一个代码路径断言 archiver 已死,但一个检查使得这种情况不可能发生。作者:Bharath Rupireddy 讨论:https://postgr.es/m/CALj2ACW=CYE1ars+2XyPTEPq0wQvru4c0dPZ=Nrn3EqNBkksvQ@mail.gmail.com Backpatch-throgh:14 https://git.postgresql.org/pg/commitdiff/dc2db1eac365b97c9129393acfe11102859f9e23
为 pg_receivewal 的 ZLIB 压缩添加 TAP 测试。pg_receivewal 中处理 ZLIB 压缩的代码量不小,从基本功能(如格式名称、起始流位置的计算)到压缩本身,但之前没有自动覆盖。此提交引入了一组条件测试(如果构建支持 ZLIB),以覆盖 ZLIB 压缩 WAL 段的创建、部分压缩 WAL 段的处理以及压缩操作本身。请注意,还有一个额外的阶段,通过直接使用 Makefile 传递给 pg_receivewal 的 gzip 命令来检查生成文件的有效性。如果找不到该命令,则会跳过此部分,在 Windows 上使用 MSVC 时很可能发生这种情况,除非在测试的环境变量中设置 GZIP_PROGRAM。这一系列测试将有助于即将进行的补丁,这些补丁将为 pg_receivewal 使用的压缩方法(如 LZ4)添加更多选项,以确保现有功能不会被破坏。作者:Georgios Kokolatos 审阅者:Gilles Darold, Michael Paquier 讨论:https://postgr.es/m/07BK3Mk5aEOsTwGaY77qBVyf9GjoEzn8TMgHLyPGfEFPIpTEmoQuP2P4c7teesjSg-LPeUafsp1flnPeQYINMSMB_UpggJDoduB5EDYBqaQ=@protonmail.com https://git.postgresql.org/pg/commitdiff/ffc9ddaea33f6dfd3dfa95828a0970fbb617bf8a
修复 pg_receivewal 的 TAP 测试中 gzip 的可移植性问题。OpenBSD 的 gzip 实现只将后缀为“Z”、“gz”、“z”、“tgz”或“taz”的文件视为有效目标,忽略其他任何内容,当命令使用 --test 时,如果发现任何无效文件,将以错误代码 512 退出。ffc9dda 中引入的测试检查了一个后缀为 .gz.partial 的 WAL 段,这足以导致测试失败。仅测试完整段在覆盖范围内已经足够,因此通过在此检查中丢弃 .gz.partial 段来简化代码。这应该足以使测试在 OpenBSD 环境中通过。根据 curculio 的报告。讨论:https://postgr.es/m/YPAdf9r5aJbDoHoq@paquier.xyz https://git.postgresql.org/pg/commitdiff/0da3c1bc3f7261d5157f5b86ade88e8b379f8686
在 Windows 上禁用 pg_receivewal 的 ZLIB 测试。正如 buildfarm 成员 bowerbird 报告的那样,这些测试在 Windows 上不稳定。那里出现的失败指向 gzflush() 的问题,它未能同步一个新打开的文件,即使 gzFile 已正确打开。在我使用 MSVC 测试时,我遇到了另一个错误,即文件根本无法打开,这让我对在 Windows 上测试此区域是否是一个好主意持怀疑态度,因为这可能会导致随机的并发失败。这需要进一步调查,而长期让这个 buildfarm 成员持续红色状态并不是一件好事,因此目前仅禁用在 Windows 上的这组测试。讨论:https://postgr.es/m/YPDLz2x3o1aX2wRh@paquier.xyz https://git.postgresql.org/pg/commitdiff/6cea447e6a10cd7ef511470e809a894a013e6a18
Heikki Linnakangas 提交
移除对局部变量的无用赋值。这应该在 commit 7e30c186da 中移除,该 commit 将循环拆分为两个。只有第一个循环使用 'from' 变量;在第二个循环中更新它是错误的。它从未在第一个循环之后被读取,因此这是无害的,并且肯定会被编译器优化掉,但我们还是保持整洁。向所有支持的版本回溯。作者:Ranier Vilela 讨论:https://postgresql.ac.cn/message-id/CAEudQAoWq%2BAL3BnELHu7gms2GN07k-np6yLbukGaxJ1vY-zeiQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/4c64b51dc51f8ff7e3e51eebfe8d10469a577df1
在 psql \copy from 中,以更大的块将数据发送到服务器。以前,我们会将每一行作为单独的 CopyData 消息发送。如果表较窄,这相当浪费,因为每个 CopyData 消息都有 5 字节的开销。为了提高效率,将 8 kB 的输入数据缓冲并打包到每个 CopyData 消息中。服务器在 COPY TO STDOUT 中也以单独的 CopyData 消息发送每一行,这同样是浪费的。但这在 FE/BE 协议描述中有记录,因此更改它将打破线协议。审阅者:Aleksander Alekseev 讨论:https://postgresql.ac.cn/message-id/40b2cec0-d0fb-3191-2ae1-9a3fe16a7e48%40iki.fi https://git.postgresql.org/pg/commitdiff/eec57115e4c866f26bdc8bcbe3e2e7be4c6d0450
Peter Eisentraut 提交
文档:修复函数原型的拼写错误。https://git.postgresql.org/pg/commitdiff/5b60cf35f566697030a2895dfe27dde2e34dd370
修复消息缺少复数形式。https://git.postgresql.org/pg/commitdiff/55b2a2340758da8ff11357d719d169f264ac7112
修复语法文件中的一些非标准 C 代码缩进。https://git.postgresql.org/pg/commitdiff/9aa8268faa0ec2904f55e85be5ec7b365c98edd1
文档:拼写检查。https://git.postgresql.org/pg/commitdiff/46111fb7b57876a87eb0630ec12ad30950e38a39
Tom Lane 提交
将 RelationOpenSmgr() 替换为 RelationGetSmgr()。此补丁的目的是消除诸如 commit 9d523119f 所修复的错误。以前,一旦调用了 RelationOpenSmgr(rel),就可以在某个不太清楚的时间间隔内直接访问 rel->rd_smgr。但是,由于该指针会被 relcache 刷新清除,因此我们出现了由于过度依赖先前有效的 RelationOpenSmgr 调用而导致的错误。现在,除了 rel.h 和 relcache.c 中的代码外,很少有代码会直接访问 rd_smgr 字段。常规编码规则是使用 RelationGetSmgr(rel) 并且不要期望结果比一次 smgr 函数调用更有效。有几个地方,每次都使用该函数似乎有点过度,但现在它们都带有大型警告注释。Amul Sul,基于我的一个想法。讨论:https://postgr.es/m/CANiYTQsU7yMFpQYnv=BrcRVqK_3U3mtAzAsJCaqtzsDHfsUbdQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f10f0ae420ee62400876ab34dca2c09c20dcd030
以更 macOS 友好的方式探测 preadv/pwritev。Apple 处理仅在某些 OS 版本中可用的函数的方式会混淆 AC_CHECK_FUNCS 和 AC_REPLACE_FUNCS。我们可以使用 AC_CHECK_DECLS 代替,前提是我们启用 -Werror=unguarded-availability-new。这允许为 macOS 编译的人通过设置 MACOSX_DEPLOYMENT_TARGET 来控制是否使用 preadv/pwritev,而不是提供一个向后兼容的 SDK。(当然,后者仍然有效。)James Hilliard 讨论:https://postgr.es/m/20210122193230.25295-1-james.hilliard1@gmail.com https://git.postgresql.org/pg/commitdiff/f014b1b9bb8eda4e82c1805969dbae2b07b7d54d
将 debug_invalidate_system_caches_always 重命名为 debug_discard_caches。commit 4656e3d66 引入的名称被认为过长。为了匹配此更改,将 initdb 最近添加的 --clobber-cache 选项重命名为 --discard-caches。讨论:https://postgr.es/m/1374320.1625430433@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/d68a00391214be2020e49be4b55f761d47a5c229
替换 Param 时复制其 location 字段到 Const。这使得 Param 替换能够产生与字面编写常量值完全相同的结果。虽然就当前核心代码而言,这几乎无关紧要,但扩展可能会对节点位置字段更感兴趣。Julien Rouhaud 讨论:https://postgr.es/m/20170311220932.GJ15188@nol.local https://git.postgresql.org/pg/commitdiff/be850f1822e4b54d1d570eefa8a7242788011634
确保 MSVC 构建中的 HAVE_DECL_XXX 宏与 Unix 中的宏匹配。Autoconf 的 AC_CHECK_DECLS() 总是定义 HAVE_DECL_whatever 为 1 或 0,但 msvc/Solution.pm 中的一些条目显示符号为“undef”而不是 0。为了保持一致性,修正了这一点。据我所知,目前的使用中没有实际的 bug,但如果添加更复杂的 #if 测试,很容易引入一个。回溯到 v13,这是 Solution.pm 中包含此数据的最远版本。手动填充的 msvc/Solution.pm 文件中的旧分支仍然存在这种不一致性;但只要问题是潜在的,在那里清理似乎不值得麻烦。讨论:https://postgr.es/m/3185430.1626133592@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e529b2dc37ac80ccebd76cdbb14966d3b40819c9
将 pg_depend 中显式的 PIN 条目替换为 OID 范围测试。从 v14 开始,pg_depend 包含近 7000 个“pin”条目,记录了内置对象的 OID。对于每个数据库来说,这都是相当大的膨胀,它增加了 pg_depend 查询和 initdb 的时间。我们可以摆脱所有这些条目,而改为使用 OID 范围检查,即“OIDs below FirstUnpinnedObjectId are pinned”(低于 FirstUnpinnedObjectId 的 OID 是固定的)。(template1 和 public schema 是例外。这些例外现在被硬编码到 IsPinnedObject() 中,而不是 initdb 中用于填充 pg_depend 的代码,但无论哪种方式,这都是相同的数量的杂乱代码)。pg_shdepend 的内容也做了类似的修改。讨论:https://postgr.es/m/3737988.1618451008@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/a49d081235997c67e8aab7a523b17e8d1cb93184
文档:记录 current-transaction-modes GUCs。我们有 default_transaction_isolation 等的文档,但不知何故没有 transaction_isolation 等的文档。据我所知,这只是一个古老的疏忽,所以进行修复。根据 Yanliang Lei 的 bug #17077。讨论:https://postgr.es/m/17077-ade8e166a01e1374@postgresql.org https://git.postgresql.org/pg/commitdiff/665c5855e5820531f500dad50f29f377af537ecc
Thomas Munro 推送
为 psql 的 \watch 命令添加 PSQL_WATCH_PAGER。允许 \watch 命令使用分页器。这可行,但对于“less”等传统分页器来说不太有用,因此使用不同的环境变量。流行的开源工具“pspg”(也由 Pavel 开发)知道如何在设置 PSQL_WATCH_PAGER="pspg --stream" 时显示输出。为了让 \watch 在用户退出分页器或按下 ^C 时做出快速响应,并提高其计时精度并减少无用上下文切换的频率,将 \watch 命令的主循环更改为使用 sigwait() 而不是 sleep/polling 循环(仅在 Unix 上)。目前仅在 Unix 上受支持(如 pspg)。作者:Pavel Stehule pavel.stehule@gmail.com 作者:Thomas Munro thomas.munro@gmail.com 讨论:https://postgr.es/m/CAFj8pRBfzUUPz-3gN5oAzto9SDuRSq-TQPfXU_P6h0L7hO%2BEhg%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/7c09d2797ecdf779e5dc3289497be85675f3d134
sigwait 的可移植性修复。运行古老的 HPUX 和 Solaris 的 Build farm 机器具有非标准的 sigwait()(来自 POSIX 的草稿版本),因此它们不喜欢 commit 7c09d279。为避免一般性问题,仅当 sigwait() 由 <signal.h> 声明并且与预期声明匹配时才尝试使用 sigwait()。为了在 Solaris 上选择现代声明(即使在非线程程序中),将 -D_POSIX_PTHREAD_SEMANTICS 移到正确的位置以影响所有翻译单元。还修复了错误检查。现代 sigwait() 不会设置 errno。感谢 Tom Lane 的帮助。讨论:https://postgr.es/m/3187588.1626136248%40sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/5865e064abfbbe11ebfc09881be009c0f69b4dc2
David Rowley 提交
修复 tuplesort 中的理论 bug。这修复了 tuplesort.c 中的一个理论 bug,该 bug 在使用有界排序结合 byval Datum 排序(tuplesort_begin_datum)时,当排序切换到 make_bounded_heap() 中的有界堆时,我们会调用 free_sort_tuple()。问题在于,当排序 byval 类型的 Datum 时,tuple 为 NULL,而 free_sort_tuple() 会释放其内存,而不考虑这一点。这将导致崩溃。这里我们通过添加一个检查来解决这个问题,在尝试分离和释放属于它的任何内存之前,先检查 tuple 是否为 NULL。这个 bug 只是理论上的原因在于,在当前代码库中,我们没有任何地方在执行 Datum 排序时执行 tuplesort_set_bound()。但是,我们将回溯一个修复,因为如果任何扩展以这种方式使用代码,它很可能会导致问题。作者:Ronan Dunklau 讨论:https://postgr.es/m/CAApHDvpdoqNC5FjDb3KUTSMs5dg6f+XxH4Bg_dVcLi8UYAG3EQ@mail.gmail.com Backpatch-through:9.6,最旧的支持版本 https://git.postgresql.org/pg/commitdiff/41469253e970b539a4ae75226dd4f226b7b2bc8c
增强 tuplesort 的 free_sort_tuple 函数。41469253e 花费了精力来移除 free_sort_tuple 中的一个理论 bug,通过检查 tuple 是否为 NULL 再释放它。让我们通过将 tuple 设置为 NULL 来使其更健壮,这样如果我们再次被调用,我们就不会对已经 pfree 的 tuple 进行 pfree。根据 Tom Lane 的建议。讨论:https://postgr.es/m/3188192.1626136953@sss.pgh.pa.us Backpatch-through:9.6,与 41469253e 相同 https://git.postgresql.org/pg/commitdiff/5bd38d2f2846c7e387d04a16c4372da0de7b1221
移除 INT8 序列的无用范围检查。检查 INT8 序列的 seqmin 和 seqmax 值是否超出 int64 类型的最小值和最大值没有意义。两者都使用相同的底层类型,因此 INT8 肯定不会超出 int64 支持的最小值和最大值。这些代码几乎无害,而且似乎大多数编译器都会将其优化掉,但我们还是将其移除,并用一个简短的注释来解释为什么不需要进行检查。作者:Greg Nancarrow,注释由 David Rowley 修改 讨论:https://postgr.es/m/CAJcOf-c9KBUZ8ow_6e%3DWSfbbEyTKfqV%3DVwoFuODQVYMySHtusw%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/e0271d5f1e871dd61efc26bda8a0b556c7935901
将 Result Cache 节点名称更改为 Memoize。“Result Cache”这个名字从未很好地用于这个节点,但没有人想出另一个足够受欢迎的名字。直到 David Johnston 提到“Node Memoization”,Tom Lane 将其简化为“Memoize”。人们似乎喜欢“Memoize”,所以我们进行重命名。审阅者:Justin Pryzby 讨论:https://postgr.es/m/20210708165145.GG1176@momjian.us Backpatch-through:14,其中引入了 Result Cache https://git.postgresql.org/pg/commitdiff/83f4fcc65503c5d4e5d5eefc8e7a70d3c9a6496f
Amit Kapila 提交
* 修改输出插件 (pgoutput) 来实现新的两阶段 API 回调,利用扩展复制协议。* 修改复制应用工作进程,通过在 prepare 时重放来正确处理两阶段事务。* 添加一个新的 SUBSCRIPTION 选项“two_phase”以允许用户启用两阶段事务。我们在初始数据同步完成后启用 two_phase。然而,我们必须在复制槽创建期间显式禁用两阶段事务的复制,即使插件支持它。我们不需要复制此阶段累积的更改,而且,我们没有打开复制连接,因此也不知道数据要发送到哪里。流式传输选项不允许与这个新的 two_phase 选项一起使用。这可以作为单独的补丁来完成。我们不允许切换订阅的 two_phase 选项,因为这可能导致副本不一致。出于同样的原因,我们不允许在订阅启用 two_phase 后刷新发布,除非 copy_data 选项为 false。作者:Peter Smith、Ajin Cherian 和 Amit Kapila,基于 Nikhil Sontakke 和 Stas Kelvich 的先前工作 审阅者:Amit Kapila, Sawada Masahiko, Vignesh C, Dilip Kumar, Takamichi Osumi, Greg Nancarrow 测试者:Haiying Tang 讨论:https://postgr.es/m/02DA5F5E-CECE-4D9C-8B4B-418077E2C010@postgrespro.ru 讨论:https://postgr.es/m/CAA4eK1+opiV4aFTmWWUF9h_32=HfPOW9vZASHarT0UA5oBrtGw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a8fd13cab0ba815e9925dc9676e6309f699b5f72Magnus Hagander 已推送
John Naylor 提交了
Dean Rasheed 已推送
改进“冲突或冗余选项”错误的报告。在报告“冲突或冗余选项”错误时,尝试确保使用 errposition(),以帮助用户识别错误的选项。以前,errposition() 的调用率不到 60%。此补丁将其提高到 90% 以上,但仍有少数地方 ParseState 不易获得。在这种情况下,使用 errdetail() 可能会改善错误,但这留待将来处理。此外,由于此错误从代码库中的 100 多个地方抛出,因此引入一个专用函数来抛出它,以减少代码重复。由 Vignesh C 的一个稍大的补丁提取。由 Bharath Rupireddy、Alvaro Herrera、Dilip Kumar、Hou Zhijie、Peter Smith、Daniel Gustafsson、Julien Rouhaud 和我审阅。讨论:https://postgr.es/m/CALDaNm33FFSS5tVyvmkoK2cCMuDVxcui=gFrjti9ROfynqSAGA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2bfb50b3df11399ed80347dd03bfaf8cd5acf962
改进 CREATE COLLATION 选项的错误检查。检查冲突或冗余的选项,正如我们对大多数其他命令所做的那样。将任何选项指定一次以上是至少冗余的,并且很可能表明用户代码存在错误。在进行此操作时,通过添加详细文本(与 CREATE DATABASE 相同)来改进冲突的 locale 选项的错误。Bharath Rupireddy,由 Vignesh C 审阅。我进行了一些额外的修改。讨论:https://postgr.es/m/CALj2ACWtL6fTLdyF4R_YkPtf1YEDb6FUoD5DGAki3rpD+sWqiA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ba620760c4c8ca90ff83ecf7e4d46f5ec4dabd7b
Alexander Korotkov 提交了
修复多范围运算符目录定义中的小不一致之处。此提交修复了几个多范围运算符的描述以及另一个多范围运算符的 oprjoin。opjoin 的更改更具装饰性,因为旧函数和新函数都返回相同的常量。这些装饰性更改不值得目录在 14beta2 和 14beta3 之间不兼容。因此,catversion 不会增加。讨论:https://postgr.es/m/CAPpHfdv9OZEuZDqOQoUKpXhq%3Dmc-qa4gKCPmcgG5Vvesu7%3Ds1w%40mail.gmail.com Backpatch-throgh:14 https://git.postgresql.org/pg/commitdiff/768ea9bcf98120eef01a6deea9c5c6997b153ab1
支持 unnest(multirange)。已发现多范围无法分解为单个范围。订阅和正确的扩展对象表示需要大量工作,对于 v14 来说时间太晚了。此提交提供了 unnest(multirange) 的实现,这相当简单。unnest(multirange) 被定义为多态过程。Catversion 已增加。报告者:Jonathan S. Katz 讨论:https://postgr.es/m/flat/60258efe-bd7e-4886-82e1-196e0cac5433%40postgresql.org 作者:Alexander Korotkov 审阅者:Justin Pryzby, Jonathan S. Katz, Zhihong Yu, Tom Lane 审阅者:Alvaro Herrera https://git.postgresql.org/pg/commitdiff/9e3c217bd98da803709872a8612577d88a39329a
9e3c217bd9 遗漏了 catversion 增加。https://git.postgresql.org/pg/commitdiff/f157db862225a7bfe041ca3f7b73e913e2a8d8d6
Daniel Gustafsson 提交
Álvaro Herrera 提交
在槽无效后正确推进旧段范围。当某些槽因 max_slot_wal_keep_size 限制而被无效化时,旧段范围应该向前移动以保持在限制内。然而,在 commit c6550776394e 中,我们在无效化复制槽后忘记再次调用 KeepLogSeg 来重新计算范围。在其他槽仍然存在的情况下,限制最终会因为其他原因重新计算,但如果所有槽都被无效化,那么之后限制就不会移动了。进行修复。回溯到引入该功能的 13 版本。作者:Kyotaro Horiguchi horikyota.ntt@gmail.com 报告者:Marcin Krupowicz mk@071.ovh 讨论:https://postgr.es/m/17103-004130e8f27782c9@postgresql.org https://git.postgresql.org/pg/commitdiff/ead9e51e82363a0e492d56aee83ed11b3759a615
克隆行触发器到分区时保留 firing-on 状态。当触发器从分区表克隆到其分区时,'tgenabled' 标志(origin/replica/always/disable)未被传播。使其使得分区上触发器的标志初始值与分区表上的值相同。添加一个测试用例来验证行为。回溯到 11 版本,该版本出现在 commit 86f575948c77 中。作者:Álvaro Herrera alvherre@alvh.no-ip.org 报告者:Justin Pryzby pryzby@telsasoft.com 讨论:https://postgr.es/m/20200930223450.GA14848@telsasoft.com https://git.postgresql.org/pg/commitdiff/df80fa2ee50478391445cef03e42c1b3d64fccca
修复 pg_dump 对分区表上已禁用触发器的处理。pg_dump 未能保留分区上已更改的“enabled”标志(它不仅可以是 disabled,还可以是 REPLICA 或 ALWAYS)。尝试通过包含此类触发器的定义来处理,但用 ALTER TRIGGER 行替换标准的 CREATE TRIGGER 行。回溯到 11 版本,其中存在这些触发器。在 11 和 12 分支中,从 commit b9b408c48724 中获取一些测试行,以验证 pg_upgrade 是否能够处理这些安排。合著者:Justin Pryzby pryzby@telsasoft.com 合著者:Álvaro Herrera alvherre@alvh.no-ip.org 讨论:https://postgr.es/m/20200930223450.GA14848@telsasoft.com https://git.postgresql.org/pg/commitdiff/f0e21f2f61675f4e56ae53d32ea54d587a7c2257
使新的复制槽测试代码不那么容易出现竞态条件。ead9e51e8236 中添加的新测试代码存在竞态条件——它依赖于共享内存状态,该状态在 WARNING 消息被记录之前就已更改。将顺序反过来。回溯到 13 版本。作者:Álvaro Herrera alvherre@alvh.no-ip.org 讨论:https://postgr.es/m/202107161809.zclasccpfcg3@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/8589299e03fff012e0bbb9716693750a0d68eef7
David Rowley 发送了补丁的另一版修订,用于在添加到 RelOptInfo 结构中的 Bitmapset 中跟踪未修剪的分区,并在更多情况下允许有序分区扫描。
Hayato Kuroda 发送了补丁的另一版修订,用于修复 ECPG 中的 DEALLOCATE 和 DESCRIBE。
David Rowley 提交了另一个补丁修订版,旨在提高事务中访问大量关系后事务完成的速度。
Hou Zhijie 提交了另一个补丁修订版,使在写入操作中使用并行操作成为可能。
Rahila Syed 提交了两个补丁修订版,使通过列过滤逻辑复制成为可能。
Álvaro Herrera 提交了一个补丁,旨在修复一个错误,该错误表现为在向分区插入数据时分区检查未更新。
Jeevan Ladhe 提交了两个补丁修订版,用于在错误消息中指定 `pg_upgrade` 中哪些数据库存在错误。
Magnus Hagander 提交了另一个补丁修订版,增加了对 PROXY 协议的支持。
Bharath Rupireddy 提交了一个补丁,将 `{pre, post}_auth_delay` 中的 `pg_usleep` 替换为 `WaitLatch`。
Vigneshwaran C 提交了三个补丁修订版,为 PUBLICATION 增加了模式级别的粒度。
John Naylor 提交了四个补丁修订版,用于加快 UTF-8 验证的速度。
David Rowley 提交了四个补丁修订版,为 `ORDER BY / DISTINCT` 聚合函数增加了适当的规划器支持。
Ronan Dunklau、David Rowley 和 Ranier Vilela 交换了补丁,在 ExecSort 中使用优化的单数据元组排序。
Masahiro Ikeda 提交了两个补丁修订版,用于修复 `heap_prune_chain()` 中一些错误的注释。
Alexander Lakhin 提交了另一个补丁修订版,旨在修复一个错误,该错误表现为在 Win32 上花费更多时间进行“删除挂起”操作。
Tom Lane 提交了另一个补丁修订版,用于减少挂起失效消息的内存消耗。
Peter Smith 提交了一个补丁,以避免不必要的 `PGserverVersion` 调用。
Craig Ringer 提交了一个补丁,用于让 `pgflex.pl` 和 `pgbision.pl` 从 `buildenv.pl` 读取工具名称,并支持 `config.pl` 中的额外预处理器定义。
Maxim Orlov 提交了另一个补丁修订版,用于修复并行工作进程断言失败和核心转储问题。
Tom Lane 提交了另一个补丁修订版,旨在修复一个错误,该错误表现为在具有不同数据库排序规则的表上使用 `postgres_fdw` 进行的合并连接失败。
Peter Smith 和 Euler Taveira de Oliveira 交换了补丁,为逻辑复制增加了行过滤。
Ian Barwick 提交了一个补丁,用于记录 `pg_encoding_to_char()` 和 `pg_char_to_encoding()`。
Fabien COELHO 提交了另一个 `psql` 补丁修订版,用于将回显代码分离出来。
Heikki Linnakangas 提交了另一个补丁修订版,用于重构 `LogicalTapeSet/LogicalTape` 接口,使其不再需要预先知道要创建的磁带数量,并用简单的平衡 k 路合并算法替换了多相合并算法。
Heikki Linnakangas 提交了另一个补丁修订版,用于为了安全性和清晰性将几个 `ResourceOwnerEnlarge()` 调用移位,使 `resowners` 更易于扩展,并优化了其中使用的哈希函数。
Daniil Zakhlystov 提交了另一个补丁修订版,用于普遍添加 zlib 和 zstd 流式压缩,然后使用此基础设施将其添加到 libpq。
Zhihong Yu 提交了两个补丁修订版,用于 `pfree()` 一个 `palloc()`ed 字符串。
Ajin Cherian 发送了另一个修订版的补丁,用于跳过逻辑复制的空事务。
Kyotaro HORIGUCHI 提交了另一个补丁修订版,用于在命令行和环境变量中严格检查数值参数,并记录这些更改对 PGCTLTIMEOUT 的影响。
Hou Zhijie 提交了一个补丁,用于避免在 `pg_dump` 中重复调用 `PQfnumber`。
Gilles Darold 提交了两个补丁修订版,允许通过注册的事务回调在任何命令开始时执行用户定义的代码。
Peter Smith 提交了另一个补丁修订版,为流式事务增加了准备 API 支持。
Huailing Liu 提交了一个补丁,用于移除一个令人困惑的 SI 无效(SI inval)。
Kyotaro HORIGUCHI 提交了另一个补丁修订版,用于从 `XLogReadRecord` 中移除 `read_page` 回调。
Heikki Linnakangas 提交了另一个补丁修订版,为 GIN 增加了 `amcheck`。
enis Hirn 提交了另一个补丁修订版,允许在公共表表达式中存在多个线性递归自引用。
Haiying Tang 提交了一个补丁,用于收紧 `psql` 标签补全功能的帮助输出。
Vigneshwaran C 发送了另一个版本的补丁,用于在 CREATE/ALTER SUBSCRIPTION 时识别发布者中缺少的发布。
Arne Roland 提交了另一个补丁修订版,用于递归重命名分区表上的触发器。
Andrey V. Lepikhov 提交了另一个补丁修订版,用于教优化器考虑非分区表与分区表每个分区的分区连接,并禁止连接两个分区(或附加)关系的不对称机制,因为这可能导致在 `NestLoop` 路径的重新参数化期间大量消耗 CPU 和内存。
Bharath Rupireddy 提交了另一个补丁修订版,用于区分使用“非负”的错误消息。
Magnus Hagander 提交了一个补丁,用于用其 git 修订版标记 tarball。
Andrey V. Lepikhov 提交了另一个补丁修订版,用于移除关系与其自身的内部连接,如果可以证明该连接可以用扫描替换。
Ryohei Takahashi 提交了两个补丁修订版,用于加快 `COMMIT PREPARED` 的速度。
Mark Dilger 提交了一个补丁,用于停止忽略文件关闭时的失败。
Justin Pryzby 提交了两个补丁修订版,增加了新的元命令 `\dn+` 以显示每个模式的大小,以及 `\dA+` 用于显示 AM。
Aleksander Alekseev 提交了另一个补丁修订版,用于重构 `procarray`。
Yugo Nagata 提交了另一个补丁修订版,用于修复表现为 `pgbench` 错误和串行化/死锁重试的错误。
Justin Pryzby 提交了另一个补丁修订版,用于支持 `ALTER TABLE ... ACCESS METHOD` 并允许指定分区表的访问方法继承给分区。
Dilip Kumar 在 `src/backend/replication/basebackup_gzip.c` 中添加了一个缺失的 `bbsink_forward_end_archive(sink)`。
Kyotaro HORIGUCHI 提交了一个补丁,用于修复字符映射表中的许多重复拼写错误。
Bertrand Drouvot 提交了另一个补丁修订版,用于在备用服务器上实现最小逻辑解码。
Li Japin 和 Amit Kapila 交换了补丁,以禁止将复制槽名称设置为空字符串。
Ranier Vilela 提交了一个补丁,用于取消一些变量的阴影,并减少现代编译器的一些 `-Wsign-compare` 警告。
Vigneshwaran C 提交了另一个补丁修订版,用于在逻辑复制消息描述中包含实际使用的数据类型。
James Coleman 提交了另一个补丁修订版,允许对带有 `LIMIT/OFFSET` 的并行 `LATERAL` 子查询。
Dinesh Chemuduru 提交了一个补丁,为 PL/pgsql 增加了新的诊断信息 `PG_PARSE_SQL_STATEMENT` 和 `PG_PARSE_SQL_STATEMENT_POSITION`。
Andrew Dunstan 提交了三个补丁修订版,用于清理 `PostgresNode.pm`。
Álvaro Herrera 和 Ranier Vilela 交换了补丁,用于从 `slot.c` 中移除一个无用的 `strlen`。
Kyotaro HORIGUCHI 提交了两个补丁修订版,用于使 `FPI_FOR_HINT` 遵循标准的 `FPI` 发射策略。
Yugo Nagata 提交了一个补丁,旨在修复一个错误,该错误表现为在脚本开始时准备命令,而不是在命令首次执行时。
Soumyadeep Chakraborty 提交了另一个补丁修订版,用于通过引用 `pgprocno` 中的目标进程来提高 `ProcSendSignal()` 的效率,以避免扫描 `ProcArray` 并跟踪启动进程。
Yugo Nagata 和 Ranier Vilela 交换了补丁,旨在修复一个错误,该错误表现为 WAL 页头损坏从未报告。
Atsushi Torikoshi 提交了一个补丁,用于记录执行 `pg_import_system_collations()` 需要超级用户权限。
Peter Smith 提交了一个补丁,用于在将 `strcpy` 用于 `gid` 缓冲区时防止潜在的缓冲区溢出。
Atsushi Torikoshi 提交了另一个修订版的补丁,添加了一个函数,用于记录具有指定进程 ID 的后端当前运行的查询的完整查询字符串及其计划。