https://archives.postgresql.org/pgsql-jobs/2021-07/
PostgreSQL 星球:https://planet.postgresql.org/
本周的 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间/太平洋夏令时间周日下午 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 引入的用于增强 Windows 上大于 4GB 文件大小的 stat() 实现的代码无法正确检测到待删除的文件,其基于 NtQueryInformationFile() 或 GetFileInformationByHandleEx() 的方法证明了这一点,Alexander Lakhin 在他自己的自定义 TAP 测试中证明了这一点。open() 的实现中使用的在 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,向后移植:14 https://git.postgresql.org/pg/commitdiff/54fb8c7ddf152629021cab3ac3596354217b7d81
还原“修复 Windows 上待删除文件的 stat() 问题”。此操作会还原提交 54fb8c7,因为 fairywren 在 MinGW 上报告的问题,原因是那里缺少 microsoft_native_stat()。仅使用 stat() 进行 MSVC 操作不足以解决待删除文件的并发问题。可能可以在代码中绘制一些 MINGW64 以在此构建上下文中切换到 stat() 的不同实现,但我也不确定是否依赖 MinGW 中 stat() 的实现来解决我们试图修复的问题是否足够。因此,这需要更多研究。讨论:https://postgr.es/m/YOvOlfRrIO0yGtgw@paquier.xyz,向后移植: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 中不必要的断言。一个代码路径断言归档器已死,但检查使得这种情况不可能发生。作者:Bharath Rupireddy,讨论:https://postgr.es/m/CALj2ACW=CYE1ars+2XyPTEPq0wQvru4c0dPZ=Nrn3EqNBkksvQ@mail.gmail.com,向后移植:14 https://git.postgresql.org/pg/commitdiff/dc2db1eac365b97c9129393acfe11102859f9e23
为 pg_receivewal 的 ZLIB 压缩添加 TAP 测试。在 pg_receivewal 中有大量的代码处理 ZLIB 压缩,从格式名称等基本内容,到起始流位置的计算以及当然是压缩本身,但没有自动覆盖。此提交引入了一组条件测试(如果构建支持 ZLIB)以涵盖 ZLIB 压缩的 WAL 段的创建、部分压缩的 WAL 段的处理以及压缩操作本身。请注意,还有一个额外的阶段检查生成文件的有效性,方法是直接使用 gzip 命令,该命令由 pg_receivewal 的 Makefile 传递。如果找不到该命令,则会跳过此部分,这很可能会在 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 的测试。正如构建场成员 bowerbird 报告的那样,这些测试在 Windows 上不稳定。那里产生的失败指向 gzflush() 的问题,该问题无法同步新打开的文件,并且无法正确打开 gzFile。当我自己使用 MSVC 测试时,我遇到了一个不同的错误,其中一个文件根本无法打开,因此这让我非常怀疑在 Windows 上测试此区域是否是一个好主意,如果它以随机并发失败结束。这需要更多调查,并且长期保持此构建场成员为红色不是一件好事,因此目前仅在 Windows 上禁用此组测试。讨论:https://postgr.es/m/YPDLz2x3o1aX2wRh@paquier.xyz https://git.postgresql.org/pg/commitdiff/6cea447e6a10cd7ef511470e809a894a013e6a18
Heikki Linnakangas 推送了
删除对局部变量的无效赋值。此操作应该在提交 7e30c186da 中删除,该提交将循环拆分为两个。只有第一个循环使用“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 推送了
doc:修复函数原型中的拼写错误。 https://git.postgresql.org/pg/commitdiff/5b60cf35f566697030a2895dfe27dde2e34dd370
修复消息缺少复数形式的问题。 https://git.postgresql.org/pg/commitdiff/55b2a2340758da8ff11357d719d169f264ac7112
修复语法文件中一些非标准的 C 代码缩进。 https://git.postgresql.org/pg/commitdiff/9aa8268faa0ec2904f55e85be5ec7b365c98edd1
doc:拼写检查。 https://git.postgresql.org/pg/commitdiff/46111fb7b57876a87eb0630ec12ad30950e38a39
Tom Lane 推送了
将 RelationOpenSmgr() 替换为 RelationGetSmgr()。此补丁背后的想法是设计出诸如提交 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。苹果处理仅在某些操作系统版本中可用的函数的方式混淆了 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。提交 4656e3d66 引入的名称被认为过长。为了匹配这个更改,将 initdb 最近添加的 --clobber-cache 选项重命名为 --discard-caches。讨论:https://postgr.es/m/1374320.1625430433@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/d68a00391214be2020e49be4b55f761d47a5c229
在用 Const 替换 Param 时复制 Param 的 location 字段。这允许 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。为了保持一致性,修复它。在当前用法中 AFAICS 没有实际的错误,但如果添加更复杂的 #if 测试,很容易想象出现一个错误。反向移植到 v13,这是 Solution.pm 包含此数据的最早版本。这种不一致性仍然存在于旧分支的手动填充的 pg_config_ext.h.win32 文件中;但只要问题只是潜在的,似乎就不值得为此进行清理。讨论:https://postgr.es/m/3185430.1626133592@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e529b2dc37ac80ccebd76cdbb14966d3b40819c9
用 OID 范围测试替换 pg_depend 中的显式 PIN 条目。从 v14 开始,pg_depend 包含近 7000 个“pin”条目,记录内置对象的 OID。这对于每个数据库来说都是相当多的膨胀,并且还增加了 pg_depend 查找以及 initdb 的时间。我们可以通过 OID 范围检查来消除所有这些条目,即“低于 FirstUnpinnedObjectId 的 OID 被固定”。(template1 和 public 模式是例外。这些例外现在被连接到 IsPinnedObject() 中,而不是 initdb 用于填充 pg_depend 的代码中,但这两种方式的代码量相同。)pg_shdepend 的内容也进行了类似的修改。讨论:https://postgr.es/m/3737988.1618451008@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/a49d081235997c67e8aab7a523b17e8d1cb93184
文档:记录当前事务模式 GUC。我们有 default_transaction_isolation 等的文档,但出于某种原因没有 transaction_isolation 等的文档。AFAICS 这只是一个古老的疏忽,所以修复它。根据 Yanliang Lei 提出的错误 #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 命令的主循环以在 Unix 上使用 sigwait() 而不是睡眠/轮询循环。目前仅在 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 的构建场动物具有来自 POSIX 草案版本的非标准 sigwait(),因此它们不喜欢提交 7c09d279。为了避免一般问题,仅当 <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 中的理论错误。这修复了 tuplesort.c 中的一个理论错误,如果将有界排序与 byval Datum 排序 (tuplesort_begin_datum) 结合使用,当在 make_bounded_heap() 中将排序切换到有界堆时,我们会调用 free_sort_tuple()。问题是,当对 byval 类型的 Datums 进行排序时,tuple 为 NULL,而 free_sort_tuple() 会释放它的内存,而不考虑这一点。这将导致崩溃。在这里,我们通过添加一个检查来简单地修复它,以查看 tuple 是否为 NULL,然后再尝试取消关联并释放属于它的任何内存。此错误仅为理论上的原因是,在当前代码库中,我们在执行 Datum 排序时从不执行 tuplesort_set_bound()。但是,让我们反向移植对此的修复程序,因为如果任何扩展以这种方式使用代码,则很可能会导致问题。作者:Ronan Dunklau 讨论:https://postgr.es/m/CAApHDvpdoqNC5FjDb3KUTSMs5dg6f+XxH4Bg_dVcLi8UYAG3EQ@mail.gmail.com 反向移植到:9.6,最早支持的版本 https://git.postgresql.org/pg/commitdiff/41469253e970b539a4ae75226dd4f226b7b2bc8c
增强 tuplesort 的 free_sort_tuple 函数的健壮性。41469253e 不惜代价通过检查 tuple 是否为 NULL 来删除 free_sort_tuple 中的理论错误,然后再释放它。让我们通过也将 tuple 设置为 NULL 来使它更健壮一些,这样如果我们再次被调用,我们就不会最终对已经 pfree 过的 tuple 执行 pfree。根据 Tom Lane 的建议。讨论:https://postgr.es/m/3188192.1626136953@sss.pgh.pa.us 反向移植到: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
将结果缓存节点的名称更改为 Memoize。“结果缓存”对于这个节点来说从来不是一个好名字,但没有人能想出另一个让所有人足够喜欢的名字。直到 David Johnston 提到“节点记忆化”,Tom Lane 将其修订为“Memoize”。人们似乎喜欢“Memoize”,所以让我们重命名。审查人:Justin Pryzby 讨论:https://postgr.es/m/20210708165145.GG1176@momjian.us 反向移植到:14,结果缓存是在那里引入的 https://git.postgresql.org/pg/commitdiff/83f4fcc65503c5d4e5d5eefc8e7a70d3c9a6496f
Amit Kapila 推送
*
修改输出插件 (pgoutput) 以通过利用扩展的复制协议来实现新的两阶段 API 回调。*
修改复制应用工作器,以通过在准备时重放它们来正确处理两阶段事务。*
添加新的 SUBSCRIPTION 选项 “two_phase”,以允许用户启用两阶段事务。一旦初始数据同步结束,我们就启用 two_phase。但是,即使插件支持,我们也必须在复制槽创建期间显式禁用两阶段事务的复制。我们不需要复制在此阶段累积的更改,而且,我们没有打开复制连接,所以我们也不知道将数据发送到哪里。此新的 two_phase 选项不允许使用流式传输选项。这可以作为单独的补丁完成。我们不允许切换订阅的 two_phase 选项,因为它会导致不一致的副本。出于同样的原因,除非 copy_data 选项为 false,否则我们不允许在为订阅启用 two_phase 后刷新发布。作者: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、侯志杰、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 相同)来改进冲突的区域设置选项的错误。Bharath Rupireddy,由 Vignesh C. 审核。我的一些额外黑客行为。讨论:https://postgr.es/m/CALj2ACWtL6fTLdyF4R_YkPtf1YEDb6FUoD5DGAki3rpD+sWqiA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ba620760c4c8ca90ff83ecf7e4d46f5ec4dabd7b
Alexander Korotkov 推送
修复多范围运算符的目录定义中的小不一致之处。此提交修复了几个多范围运算符的描述以及另一个多范围运算符的 oprjoin。oprjoin 的更改更多是表面上的,因为新旧函数都返回相同的常量。这些表面上的更改不值得在 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 限制而失效时,旧段水平线应向前移动以保持在该限制内。但是,在提交 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
将行触发器克隆到分区时保留触发状态。当触发器从分区表克隆到其分区时,不会传播 'tgenabled' 标志(origin/replica/always/disable)。使其在分区上的触发器的标志最初设置为与分区表上的标志相同的值。添加一个测试用例来验证行为。反向移植到 11,该功能出现在提交 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' 标志(不仅可以禁用,还可以是 REPLICA 或 ALWAYS),该标志已从其各自的父级更改。尝试通过在转储中包含此类触发器的定义来处理,但将标准 CREATE TRIGGER 行替换为 ALTER TRIGGER 行。反向移植到 11,这些触发器可以在其中存在。在 11 和 12 分支中,从提交 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 发送了另一个补丁修订版,以加快在事务中访问多个关系后事务的完成速度。
侯志杰发送了另一个补丁修订版,使在写入事物中使用并行操作成为可能。
Rahila Syed 发送了另外两个补丁修订版,以使按列过滤逻辑复制成为可能。
Álvaro Herrera 发送了一个旨在修复一个错误的补丁,该错误表现为插入分区时未更新分区检查。
Jeevan Ladhe 发送了两个补丁修订版,以在错误消息中指定 pg_upgrade 中哪个数据库出现错误。
Magnus Hagander 发送了另一个补丁修订版,以添加对 PROXY 协议的支持。
Bharath Rupireddy 发送了一个补丁,用于对 {pre, post}_auth_delay 使用 WaitLatch 而不是 pg_usleep。
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 后面对具有不同 DB 校对的表进行合并联接失败。
Peter Smith 和 Euler Taveira de Oliveira 交易补丁,以添加用于逻辑复制的行过滤。
Ian Barwick 发送了一个补丁,用于记录 pg_encoding_to_char() 和 pg_char_to_encoding()。
Fabien COELHO 发送了另一个补丁修订版,将 psql 的 echo 代码分解出来。
Heikki Linnakangas 发送了另一个补丁修订版,以重构 LogicalTapeSet/LogicalTape 接口,使其不再需要预先知道将创建多少个磁带,并将多相合并算法替换为简单的平衡 k 路合并。
Heikki Linnakangas 发送了另一个补丁修订版,以移动一些 ResourceOwnerEnlarge() 调用以提高安全性和清晰度,使资源所有者更容易扩展,并优化在其中使用的哈希函数。
Daniil Zakhlystov 发送了另一个补丁修订版,以常规方式添加 zlib 和 zstd 流式压缩,然后使用此基础结构将它们添加到 libpq。
Zhihong Yu 发送了两个补丁修订版,以 pfree() 一个 palloc() 的字符串。
Ajin Cherian 发送了另一个补丁修订版,以跳过逻辑复制的空事务。
Kyotaro HORIGUCHI 发送了另一个补丁修订版,以严格检查命令行、环境变量中的数字参数,并记录这些更改对 PGCTLTIMEOUT 的影响。
侯志杰发送了一个补丁,以避免在 pg_dump 中重复调用 PQfnumber。
Gilles Darold 发送了另外两个补丁修订版,以允许通过 xact 注册的回调在任何命令开始时执行用户定义的代码。
Peter Smith 发送了另一个补丁修订版,以添加对流事务的准备 API 支持。
Huailing Liu 发送了一个补丁,以删除一个令人困惑的 SI 无效。
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 引用目标进程,避免扫描 ProcArray 并跟踪启动进程,从而使 ProcSendSignal() 更加高效。
Yugo Nagata 和 Ranier Vilela 交换了补丁,旨在修复一个错误,该错误表现为 WAL 页面头损坏从未被报告。
Atsushi Torikoshi 提交了一个补丁,以记录执行 pg_import_system_collations() 需要超级用户权限的必要性。
Peter Smith 提交了一个补丁,以防止使用 strcpy 到 gid 缓冲区时可能发生的缓冲区溢出。
Atsushi Torikoshi 提交了另一个补丁的修订版,以添加一个函数来记录完整查询字符串及其计划,用于当前在具有指定进程 ID 的后端上运行的查询。