pg_back 1.10,PostgreSQL 的备份脚本,已发布。 https://github.com/orgrim/pg_back
pgagroal 1.1.0,PostgreSQL 的高性能协议原生连接池,已发布。 https://agroal.github.io/pgagroal/release/announcement/2021/01/05/pgagroal-1.1.0.html
Veil2 0.9.2 beta,一个为 Postgres 提供数据库安全附加组件,提供一个使用行级安全性实现虚拟私有数据库的框架,已发布。 https://marcmunro.github.io/veil2/html/index.html
https://archives.postgresql.org/pgsql-jobs/2021-01/
PostgreSQL 星球:https://planet.postgresql.org/
本周的 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间 (PST8PDT) 周日下午 3:00 前将新闻和公告提交至 david@fetter.org。
Amit Kapila 推送了
允许在 ReorderBuffer 中准备时进行解码。此补丁允许在准备时解码两阶段事务(如果输出插件支持此功能),在这种情况下,事务将在准备时重放,然后在 COMMIT PREPARED 到达时稍后提交。现在我们在提交之前解码更改,当输出插件查询目录(系统和用户定义的)时,并发中止可能会导致失败。我们使用提交 7259736a6e 引入的特殊 sqlerrcode ERRCODE_TRANSACTION_ROLLBACK 检测此类故障,并停止解码剩余的更改。然后,当遇到回滚准备时,我们回滚更改。作者:Ajin Cherian 和 Amit Kapila,基于 Nikhil Sontakke 和 Stas Kelvich 的先前工作。审阅人:Amit Kapila、Peter Smith、Sawada Masahiko、Arseny Sher 和 Dilip Kumar。测试人:Takamichi Osumi。讨论:https://postgr.es/m/02DA5F5E-CECE-4D9C-8B4B-418077E2C010@postgrespro.ru https://postgr.es/m/CAMGcDxeqEpWj3fTXwqhSwBdXd2RS9jzwWscO-XbeCfso6ts3+Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/a271a1b50e9bec07e2ef3a05e38e7285113e4ce6
修复 reorderbuffer.c 中的拼写错误。作者:Zhijie Hou。审阅人:Sawada Masahiko。讨论:https://postgr.es/m/ba88bb58aaf14284abca16aec04bf279@G08CNEXMBPEKD05.g08.fujitsu.local https://git.postgresql.org/pg/commitdiff/9da2224ea2bb9801afc29bff6a325bf796868bdc
修复 origin.c 中的拼写错误。作者:Peter Smith。讨论:https://postgr.es/m/CAHut+PsReyuvww_Fn1NN_Vsv0wBP1bnzuhzRFr_2=y1nNZrG7w@mail.gmail.com https://git.postgresql.org/pg/commitdiff/cd357c76296e987298e4005b8053adda9e3fb417
测试在构建一致快照期间解码两阶段事务。提交 a271a1b50e 添加了允许在准备时进行解码的功能。这增加了一个隔离测试用例,以测试当在准备之后但在提交准备之前达到一致快照状态时是否在提交时发生解码。作者:Ajin Cherian。审阅人:Amit Kapila。讨论:https://postgr.es/m/02DA5F5E-CECE-4D9C-8B4B-418077E2C010@postgrespro.ru https://postgr.es/m/CAMGcDxeqEpWj3fTXwqhSwBdXd2RS9jzwWscO-XbeCfso6ts3+Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/5a3574d7b33480de51692962e6fd25d00c05718a
修复 decode.c 和 logical.c 中的拼写错误。根据 Ajin Cherian 在电子邮件中的报告:https://postgr.es/m/CAFPTHDYnRKDvzgDxoMn_CKqXA-D0MtrbyJvfvjBsO4G=UHDXkg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/e02e840ff7787d4798fca9f6a5b8b3657f45cf0c
修复两阶段事务解码的测试。提交 5a3574d7b3 添加了在构建一致快照期间解码两阶段事务的测试。该测试忘记跳过空 xact,这可能导致由于自动清理的后台活动而解码额外的空事务。根据 buildfarm 的报告。报告人:Tom Lane。讨论:https://postgr.es/m/363512.1610171267@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e33d004900f76c35759293fdedd4861b198fbf5b
Michaël Paquier 推送了
简化 xml.c 中的一些注释。作者:Justin Pryzby。讨论:https://postgr.es/m/X/Ff7jfnvJUab013@paquier.xyz https://git.postgresql.org/pg/commitdiff/b49154b3b7a45523ce4081fdae8d65049342fcec
在 initdb --help 中,将 --data-checksums 提升为常用选项集。这以前是专门用于不太常用选项的部分,但现在它是一个常用的选项。作者:Michael Banck。审阅人:Stephen Frost、Michael Paquier。讨论:https://postgr.es/m/d7938aca4d4ea8e8c72c33bd75efe9f8218fe390.camel@credativ.de https://git.postgresql.org/pg/commitdiff/bc08f7971c03550ede43af43e73d4a47a7935c69
修复使用 OpenSSL 时 cryptohash 上下文数据的分配逻辑。当使用 OpenSSL 构建时,cryptohash 上下文数据的分配发生在 pg_cryptohash_create() 的调用者的内存上下文中,如果级联资源在错误时被清理,可能会导致 resowner 清理出现问题。与使用 resowner 的其他工具一样,将基本分配移动到 TopMemoryContext 以确保在失败时正确清理。此提交使生成的代码更简单,因为上下文数据现在由唯一的 opaque 指针保存,因此在 TopMemoryContext 中只完成一次分配。经过讨论,还将 cryptohash 子程序更改为,如果调用者为上下文数据提供 NULL,则返回错误,以简化 OOM 错误检测。作者:Heikki Linnakangas。讨论:https://postgr.es/m/X9xbuEoiU3dlImfa@paquier.xyz https://git.postgresql.org/pg/commitdiff/55fe26a4b580b17d721c5accb842cc6a08295273
修复并简化一些与 cryptohash 相关的代码。此提交解决了两个问题:- 在 pgcrypto 中,MD5 计算调用了 pg_cryptohash_{init,update,final} 而没有检查结果状态。- 简化 pg_checksum_raw_context 以仅使用一个变量来表示校验和清单中提供的所有 SHA2 选项。报告人:Heikki Linnakangas。讨论:https://postgr.es/m/f62f26bb-47a5-8411-46e5-4350823e06a5@iki.fi https://git.postgresql.org/pg/commitdiff/15b824da97afb45f47e51b6b5b7e5eca09e5d03d
Tom Lane 推送了
为核心语法添加支持多个解析目标的功能。此补丁本质上允许 gram.y 实现一系列相关的语法树,而不是必须始终解析 SQL 语句列表。raw_parser() 获取一个新参数 enum RawParseMode 来指定要执行的操作。作为概念验证,添加一个仅解析不带任何其他修饰的 TypeName 的模式,并使用它来大大简化 typeStringToTypeName()。此外,发明一个新的 SPI 入口点 SPI_prepare_extended(),以允许 SPI 用户(尤其是 plpgsql)访问此新功能。为了使它成为 SPI_prepare() 的最后一个变体,将它的附加参数设置为一个结构而不是直接参数,并承诺该结构将来的添加可以默认为零。SPI_prepare_cursor() 和 SPI_prepare_params() 可能在某个时候消失。讨论:https://postgr.es/m/4165684.1607707277@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/844fe9f159a948377907a63d0ef3fb16dc51ce50
重新实现 pl/pgsql 的表达式和赋值解析。发明新的 RawParseModes,允许核心语法直接处理 pl/pgsql 表达式和赋值,从而消除 pl/pgsql 解析器中的大量黑客行为。这会将大量有关 pl/pgsql 的知识移动到核心代码中:值得注意的是,我们必须发明一个 CoercionContext,该上下文与 pl/pgsql 赋值强制转换的(相当可疑的)历史行为相匹配。这正在偏离 pl/pgsql 作为核心的远距离扩展的最初想法,但实际上我们很久以前就越过了这座桥梁。这样做的主要优点是,我们现在可以使用核心解析器生成 FieldStore 和/或 SubscriptingRef 节点来处理对作为记录或数组的 pl/pgsql 变量的赋值。这修复了许多从未在 pl/pgsql 赋值中实现的情况,例如嵌套记录和数组切片,并且它允许 pl/pgsql 赋值支持在提交 c7aba7c14 中引入的数据类型特定的下标行为。还有一些美观上的好处:当 pl/pgsql 表达式中出现语法错误时,错误报告不再包含曾经添加到表达式文本的前缀的令人困惑的“SELECT”关键字。此外,似乎有一些小的速度提升。讨论:https://postgr.es/m/4165684.1607707277@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/c9d5298485b78a37923a23f9af9aa0ade06762db
删除 pl/pgsql 中的 PLPGSQL_DTYPE_ARRAYELEM 数据类型。在前一个提交之后,我们不再真正需要它,因为数组赋值主要由核心代码处理。仍然可以访问该代码的唯一方法是,GET DIAGNOSTICS 目标变量可以是数组元素。但这似乎不是一个特别必要的功能。我曾在提交 55caaaeba 中添加过它,但只是因为它很容易而不是因为有人真正要求过它。因此,恢复该补丁,然后删除现在不可访问的东西。(如果我们真的需要,我们可能会使用新的赋值机制重新实现 GET DIAGNOSTICS;但是成本/收益比看起来非常差,而且它可能会慢一点。)请注意,PLPGSQL_DTYPE_RECFIELD 仍然存在。我们也有可能摆脱它,但是维护 RECORD 类型变量的现有行为似乎可能很困难。由于这些代码路径中没有任何功能限制,就像 ARRAYELEM 代码中一样,我没有继续这个想法。讨论:https://postgr.es/m/4165684.1607707277@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/1788828d33516809fa2d842bf6e273d78e21d957
重新思考 pl/pgsql 中的“读/写参数”机制。先前在 pl/pgsql 中重新实现数组元素赋值的补丁的性能问题使我意识到读/写参数机制设计错误。我们不要求赋值源表达式必须使其对目标变量的所有引用都可以作为 R/W 传递,而是真正希望将对目标变量的一个引用标识为作为 R/W 传递,允许任何其他引用像默认情况下那样作为只读传递。只要 R/W 引用是表达式中顶级(因此是最后一个要执行的)函数的直接参数,则将 R/O 引用传递给表达式的较低部分就不会有任何危害。也没有任何用例说明顶层函数的多个参数是 R/W。因此,重写该逻辑以标识引用目标变量的单个参数,并仅使该参数传递读/写引用,而不使引用目标变量的任何其他参数传递读/写引用。讨论:https://postgr.es/m/4165684.1607707277@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/1c1cbe279b3c6e8038c8f8079402f069bb4cea4c
修复 substring() 函数中的整数溢出边界情况。如果子字符串的起始索引和长度相加时发生溢出,substring() 函数的行为会不正确,要么在应该成功的情况下抛出虚假的“负子字符串长度”错误,要么不抱怨负长度为负数(而是返回整个字符串,在大多数情况下)。不出所料,该函数的 text、bytea 和 bit 变体都存在此问题。重新安排逻辑以确保始终拒绝负长度,并添加溢出检查以处理另一种情况。此外,在 detoast_attr_slice() (以前称为 heap_tuple_untoast_attr_slice())中安装类似的保护措施,因为它远不清楚通向该函数的其他代码路径是否会传递导致溢出的值。此补丁由我自己和 Pavel Stehule 提出,根据 Rafi Shamim 提出的错误 #16804。向 v11 进行回溯。虽然这些错误很旧,但在提交 4d6ad3125 之前,用于溢出检测算术的 common/int.h 基础设施不存在,并且这些错误行为似乎不足以证明为较旧的分支开发独立的修复程序是合理的。讨论:https://postgr.es/m/16804-f4eeeb6c11ba71d4@postgresql.org https://git.postgresql.org/pg/commitdiff/4bd3fad80e5c3bd107583dd9d32d4a47c045a3ec
引入新的 GUC_REPORT 设置 "in_hot_standby"。除了可以通过 SHOW 查询之外,此值会在会话启动时立即发送给客户端,如果服务器在会话期间被提升为主服务器,则稍后再次发送。即将发布的补丁将使用立即报告来避免尝试连接到主服务器时的额外往返。Haribabu Kommi、Greg Nancarrow、Tom Lane;由 Laurenz Albe、Takayuki Tsunakawa、Peter Smith 在不同时间审核。讨论:https://postgr.es/m/CAF3+xM+8-ztOkaV9gHiJ3wfgENTq97QcjXQt+rbFQ6F7oNzt9A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/bf8a662c9afad6fd07b42cdc5e71416c51f75d31
允许 psql 的 \dt 和 \di 显示 TOAST 表及其索引。以前,TOAST 对象被无条件地抑制,但由于 \d 能够打印它们,因此不清楚为什么这些变体不应该显示。相反,使用与系统目录相同的规则:如果您编写 'S' 修饰符或表名模式,则可以查看它们。(实际上,由于几乎没有人会将 pg_toast 保留在他们的 search_path 中,因此它实际上取决于您是否使用可以匹配 pg_toast.*.
的模式。)似乎不需要更改文档,因为文档已经说明这种情况发生在“系统对象”中;我们只是将 TOAST 表归类为系统对象。Justin Pryzby,由 Laurenz Albe 审核。讨论:https://postgr.es/m/20201130165436.GX24052@telsasoft.com https://git.postgresql.org/pg/commitdiff/7d80441d2c8de5cd5d593e302bd14e8b19ee92d4
还原提交 7d80441d2 中的不稳定测试用例。我一时忘记了“owner”列在构建场中不会稳定。好吧,这些测试无论如何都没有太大的价值。讨论:https://postgr.es/m/20201130165436.GX24052@telsasoft.com https://git.postgresql.org/pg/commitdiff/14d49f483d4c8a5a356e25d5e5ff5726ca43abff
为正则表达式包添加一个测试模块。此模块提供一个函数 test_regex(),该函数在功能上非常类似于 regexp_matches(),但具有额外的面向调试的选项和额外的输出。调试选项有点晦涩;它们被选择为与 Henry Spencer 在很久以前为 Tcl 编写的测试工具的 API 相匹配。有了这个,我们可以导入 Spencer 最初编写的所有测试用例,即使对于我们目前在 Postgres 中不公开的正则表达式功能也是如此。这似乎是必要的,因为我们不能再依赖 Tcl 作为上游并验证我们所做的任何修复或改进。除了 Spencer 的测试之外,我还为后行约束(我们在 2015 年添加的,而 Tcl 仍然没有吸收)添加了一些测试,这些测试是以他对先行约束的测试为模型的。在查看代码覆盖率报告后,我还加入了一些测试来更全面地执行我们的“高色图”逻辑。根据我的测试,这使 src/backend/regex/ 的检查世界覆盖率从 71.1% 提高到 86.7% 的行。(coverage.postgresql.org 显示的数字略有不同,我认为这是因为它衡量的是非断言构建。)讨论:https://postgr.es/m/2873268.1609732164@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/ca8217c10138fa3ffe1e7d1def2484fd0eb78226
添加 idle_session_timeout。此 GUC 变量的工作方式与 idle_in_transaction_session_timeout 非常相似,因为它会杀死等待新客户端查询时间过长的会话。但是,它在我们在事务之外时应用,而不是在我们在事务之内时应用。Li Japin,由 David Johnston 和 Hayato Kuroda 审核,我进行了一些修复。讨论:https://postgr.es/m/763A0689-F189-459E-946F-F0EC4458980B@hotmail.com https://git.postgresql.org/pg/commitdiff/9877374bef76ef03923f6aa8b955f2dbcbe6c2c7
改进 timeout.c 对重复超时设置/取消的处理。一个非常常见的用法模式是,我们设置一个我们不希望达到的超时,在稍微延迟后取消它,然后稍后重复。对于 timeout.c 的原始实现,这会导致每次超时设置或取消都调用一次 setitimer()。通过在更改超时中断请求方面偷懒,我们可以做得更好,即:(1) 即使我们没有活动的超时事件,也永远不要取消未完成的中断;(2) 如果我们需要设置中断,但已经有一个中断在或在所需时间之前挂起,则不要管它。当中断发生时,信号处理程序将在当时需要的任何时间重新安排它。例如,使用 statement_timeout 的一秒设置,此方法导致与内核的交互频率仅略高于每秒一次,无论我们在其间执行多少语句。主线代码在第一次之后可能永远不会调用 setitimer(),而每次信号处理程序触发时,它都会看到当时挂起的请求还有一秒钟的时间,而此时它会设置下一个中断请求。之后每个主线超时设置请求都会观察到它想要的时间已经超过了挂起的中断请求时间,并且什么也不做。对于使用几个不同超时长度的情况,这也很有效,只要它们都不是非常短。但这很好地描述了我们的用法。Thomas Munro 的想法和原始补丁;我修复了一个竞争条件并改进了注释。讨论:https://postgr.es/m/CA+hUKG+o6pbuHBJSGnud=TadsuXySWA7CCcPgCt2QE9F6_4iHQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/09cf1d52267644cdbdb734294012cf1228745aaa
改进 timeout.c 中的注释。重新阅读后,我意识到我在新的超时代码中错过了一个竞争条件。它是安全的,但添加一个注释来解释它。讨论:https://postgr.es/m/CA+hUKG+o6pbuHBJSGnud=TadsuXySWA7CCcPgCt2QE9F6_4iHQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/9486e7b666fd113f043d5f091fd42bc1ef72acd8
修复测试注释中的虚假链接。我显然在提交 ca8217c10 中复制粘贴了错误的链接。将其指向它应该去的地方。https://git.postgresql.org/pg/commitdiff/f7a1a805cb178653ea2a6c8991ad73b035af953e
进一步考虑 idle_session_timeout 补丁。经过反思,PostgresMain() 中的操作顺序是错误的。这些超时应该在我们在执行命令后读取 CHECK_FOR_INTERRUPTS 之前而不是之后关闭,以保证任何超时错误都会在那里检测到,而不是在一些定义不明确的稍后时间点(可能是在浪费了大量工作之后)。这实际上是原始 idle_in_transaction_timeout 补丁中的错误,因此回溯到引入该补丁的 9.6 版本。https://git.postgresql.org/pg/commitdiff/b8d0cda53377515ac61357ec4a60e85ca873f486
调整 createdb TAP 测试以在最近的 OpenBSD 上工作。我们在去年 2 月发现,提交 008cf0409 添加的错误用例测试在 OpenBSD 上失败,因为该平台实际上并不检查区域设置名称。当时,这似乎只是 LC_CTYPE 的问题,但在较新版本的 OpenBSD 上进行的测试表明,它现在对 LC_COLLATE 也同样宽松。与其也删除 LC_COLLATE 测试,不如放回 LC_CTYPE(还原 c4b0edb07),并调整这些测试以接受如果 setlocale() 不拒绝虚假的区域设置名称,我们会得到的不同错误消息。这些测试的重点实际上不是后端如何处理区域设置名称,而是展示 createdb 安全地引用有趣的区域设置名称;因此我们不会以这种方式失去测试可靠性。根据需要进行回溯。讨论:https://postgr.es/m/231373.1610058324@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/9ffe2278372d7549547176c23564a5b3404d072e
修复解析 BRE 模式正则表达式中的一个古老错误。brenext() 在解析 '*'
量词时,忘记为标记返回任何“值”;根据 next() 中的等效情况,它应该返回值 1 以指示需要贪婪而不是非贪婪行为。结果是,如果我们在此时的 v->nextvalue 中碰巧有一个零,则编译后的正则表达式的行为可能类似于 'x*?'
而不是预期的 'x*'
。如果我们有一个 '.*'
在 BRE 模式正则表达式的开头,这种情况似乎会以某种可靠性发生,但这取决于堆栈分配的结构的初始内容,因此不能保证会失败。由 Alexander Lakhin 使用 valgrind 测试发现。此错误似乎是 Spencer 代码中的原始错误,因此一路回溯。讨论:https://postgr.es/m/16814-6c5e3edd2bdf0d50@postgresql.org https://git.postgresql.org/pg/commitdiff/afcc8772edcec687d87b6f762ca6113229af7291
修复 plpgsql 测试以用于 debug_invalidate_system_caches_always。提交 c9d529848 导致在有更多地方的失败的错误上下文堆栈取决于 debug_invalidate_system_caches_always (以前称为 CLOBBER_CACHE_ALWAYS)。这并不奇怪,因为如果计划缓存被破坏,我们必须重新解析缓存的计划。通过隐藏这些位置的上下文堆栈来稳定预期的测试输出,就像我们在该测试脚本中的其他地方所做的那样。(现在我们有了 debug_invalidate_system_caches_always,另一个值得考虑的想法是强制它在这些测试用例中为零。这似乎有降低缓存破坏测试覆盖范围的风险,这可能值得也可能不值得能够验证我们在正常情况下获得预期的错误输出。目前,我只是坚持使用现有技术。)顺便说一句,更新了引用 CLOBBER_CACHE_ALWAYS 的注释。根据构建场成员 hyrax。https://git.postgresql.org/pg/commitdiff/39d4a153105f0693d93f593a23e5144e2bd031ef
Thomas Munro 推送
删除未使用的函数原型。清理提交 dee663f7。报告人:Tomas Vondra tomas.vondra@enterprisedb.com 讨论:https://postgr.es/m/CA+hUKGLJ=84YT+NvhkEEDAuUtVHMfQ9i-N7k_o50JmQ6Rpj_OQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/87c23d36a3bc81e57b813f13c403f74a67ff33a9
将“enum blacklist”重命名为“uncommitted enums”(未提交的枚举)。我们同意移除这个术语,并使用更具描述性的术语。讨论:https://postgr.es/m/20200615182235.x7lch5n6kcjq4aue%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/c0d4f6d897492727d4812679e6a94d12edbe016f
pgindent:whitelist/blacklist -> additional/excluded(白名单/黑名单 -> 附加/排除)。作者:Dagfinn Ilmari Mannsåker ilmari@ilmari.org 讨论:https://postgr.es/m/20200615182235.x7lch5n6kcjq4aue%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/fe05b6b620066aec313c43b6b4d6c169d0a346f7
替换所有剩余的“whitelist”(白名单)用法。改为描述列表所影响的操作,或者在含义从上下文中显而易见时直接使用“list”(列表)。作者:Dagfinn Ilmari Mannsåker ilmari@ilmari.org 讨论:https://postgr.es/m/20200615182235.x7lch5n6kcjq4aue%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/034510c820cd75e0410332d92b4967ef9b844936
Peter Geoghegan 推送了代码。
Peter Eisentraut 推送了代码。
文档:记录如何使用自定义服务器设置运行回归测试。作者:Craig Ringer craig.ringer@2ndquadrant.com 讨论:https://postgresql.ac.cn/message-id/flat/CAMsr+YF=+ctXBZj3ywmvKNUjWpxmuTuUKuv-rgbHGX5i5pLstQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/854434c50a35e7cb2ae22588c80ebf36e889197a
使用运行时 GUC 替换 CLOBBER_CACHE_ALWAYS。强制缓存失效 (CLOBBER_CACHE_ALWAYS) 在 PostgreSQL 中用于测试是不切实际的,因为它太慢了,而且只能在构建时打开/关闭。在任何使用 sycache/relcache 的代码中查找错误时,它很有帮助,因为它会在任何可能发生失效的情况下注入缓存失效,无论是否真的有失效挂起。通过使用新的 debug_invalidate_system_caches_always GUC 来提供对缓存覆盖行为的运行时控制来解决此问题。除非启用断言或在编译时显式定义了 CLOBBER_CACHE_ENABLED,否则根本不会编译支持。如果编译,则默认为 0,因此默认情况下对断言构建性能的影响可以忽略不计。当编译支持时,测试代码现在可以在后端本地设置 debug_invalidate_system_caches_always=1 来测试特定的查询、函数、扩展等。或者,测试可以为特定的测试用例全局切换它,同时在测试设置和拆卸期间保留正常的性能。为了向后兼容现有的测试工具和脚本,如果定义了 CLOBBER_CACHE_ALWAYS,则 debug_invalidate_system_caches_always 默认为 1,如果定义了 CLOBBER_CACHE_RECURSIVE,则默认为 3。CLOBBER_CACHE_ENABLED 现在在 pg_config_manual.h 中可见,relcache 的相关 RECOVER_RELATION_BUILD_MEMORY 设置也是如此。作者:Craig Ringer craig.ringer@2ndquadrant.com 讨论:https://postgresql.ac.cn/message-id/flat/CAMsr+YF=+ctXBZj3ywmvKNUjWpxmuTuUKuv-rgbHGX5i5pLstQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4656e3d66893f286767285cf74dabb3877068e49
Dean Rasheed 推送了代码。
当指数为 INT_MIN 时,修复 numeric_power()。在 power_var_int() 中,计算计算中使用的有效位数使用了 log(Abs(exp)),这不安全,因为当 exp 为 INT_MIN 时,Abs(exp) 返回 INT_MIN。使用 fabs() 而不是 Abs(),以便在取绝对值之前将指数强制转换为 double。回溯到 9.6,这是由 7d9a4737c2 引入的。讨论:https://postgr.es/m/CAEZATCVd6pMkz=BrZEgBKyqqJrt2xghr=fNc8+Z=5xC6cgWrWA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/bc43b7c2c06c32264efe79d0b86abd41236f1d5b
在使用 fabs() 时,添加显式强制转换为 double。提交 bc43b7c2c0 直接在 int 变量上使用了 fabs(),这显然需要在某些平台上进行显式强制转换。根据构建场(buildfarm)。https://git.postgresql.org/pg/commitdiff/fead67c24ada8c6a4b661dec6f159dca1447e3d8
Bruce Momjian 推送了代码。
文档:改进 NLS 指令措辞。报告人:“Tang, Haiying” 讨论:https://postgr.es/m/bbbccf7a3c2d436e85d45869d612fd6b@G08CNEXMBPEKD05.g08.fujitsu.local 作者:“Tang, Haiying” 回溯到:9.5 https://git.postgresql.org/pg/commitdiff/47b2ed1d06c1218eee8869c8eca8bf002b9d43a6
文档:扩展对如何处理非 SELECT 查询的描述。先前对执行器如何处理非 SELECT 查询的描述非常密集,导致缺乏清晰度。此扩展文本更简单地阐述了它。报告人:fotis.koutoupas@gmail.com 讨论:https://postgr.es/m/160912275508.676.17469511338925622905@wrigleys.postgresql.org 回溯到:9.5 https://git.postgresql.org/pg/commitdiff/01334c92fa09dc496a444a4f206854ef37247258
Fujii Masao 推送了代码。
文档:修复有关 recovery_target_timeline 的默认行为的描述。recovery_target_timeline 的默认值在 v12 中已更改,但有关其默认行为的描述未更新。回溯到 v12,其中 recovery_target_timeline 的默认行为已更改。作者:Benoit Lobréau 审核人:Fujii Masao 讨论:https://postgr.es/m/CAPE8EZ7c3aruEmM24GYkj8y8WmHKD1m9TtPtgCF0nQ3zw4LCkQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/25dde5835772a58356383bf1112c6c2a1a37df0e
检测后端和启动进程之间的死锁。涉及锁的恢复冲突导致的死锁可能发生在热备用后端和启动进程之间。如果后端在表上获得排他访问锁,并最终触发死锁,则可以按预期检测到该死锁。另一方面,以前,如果启动进程获得排他访问锁,并最终触发死锁,则无法检测到该死锁,并且即使在 deadlock_timeout 经过后也可能仍然存在。这是一个错误。此错误的原因是处理锁恢复冲突的代码根本没有考虑死锁情况。它假设涉及启动进程和后端的死锁可以通过后端内调用的死锁检测器来检测。但这种假设是不正确的。如果需要,启动进程也应该调用死锁检测器。为了修复此错误,此提交使启动进程在处理锁恢复冲突时,如果达到 deadlock_timeout,则调用死锁检测器。具体来说,在这种情况下,启动进程会请求所有持有冲突锁的后端检查自身是否存在死锁。回溯到 v9.6。v9.5 也存在此错误,但根据讨论,我们决定不将此修复回溯到 v9.5。因为 v9.5 没有此错误修复补丁所依赖的一些基础设施代码(例如,37c54863cf)。我们可以将这些代码应用于回溯,但由于下一个小版本发布是 v9.5 的最后一个版本,因此这样做很冒险。如果我们意外地通过回溯将新错误引入 v9.5,则没有机会修复该错误。我们确定回溯到 v9.5 会带来比收益更大的风险。作者:Fujii Masao 审核人:Bertrand Drouvot、Masahiko Sawada、Kyotaro Horiguchi 讨论:https://postgr.es/m/4041d6b6-cf24-a120-36fa-1294220f8243@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/8900b5a9d59a645b3485f5b046c4c7871b2c4026
添加 GUC 以记录恢复冲突的长时间等待。此提交添加了 GUC log_recovery_conflict_waits,它控制当启动进程等待恢复冲突的时间超过 deadlock_timeout 时是否生成日志消息。这有助于确定恢复冲突是否阻止恢复应用 WAL。请注意,目前仅当即使在 deadlock_timeout 过去后,恢复冲突仍未解决时,才会生成日志消息,即仅当即使在 deadlock_timeout 之后,启动进程仍在等待恢复冲突时才会生成日志消息。作者:Bertrand Drouvot、Masahiko Sawada 审核人:Alvaro Herrera、Kyotaro Horiguchi、Fujii Masao 讨论:https://postgr.es/m/9a60178c-a853-1440-2cdc-c3af916cff59@amazon.com https://git.postgresql.org/pg/commitdiff/0650ff23038bc3eb8d8fd851744db837d921e285
Tomáš Vondra 推送了代码。
报告 COPY 命令的进度。此提交引入了一个视图 pg_stat_progress_copy,用于报告 COPY 命令的进度。这允许大致估计正在运行的 COPY 的进度,但需要注意的是,在某些情况下(例如,当输入来自客户端时),总字节数可能不可用。作者:Josef Šimánek 审核人:Fujii Masao、Bharath Rupireddy、Vignesh C、Matthias van de Meent 讨论:https://postgr.es/m/CAFp7QwqMGEi4OyyaLEK9DR0+E+oK3UtA4bEjDVCa4bNkwUY2PQ@mail.gmail.com 讨论:https://postgr.es/m/CAFp7Qwr6_FmRM6pCO0x_a0mymOfX_Gg+FEKet4XaTGSW=LitKQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/8a4f618e7ae3cb11b0b37d0f06f05c8ff905833f
COPY 进度文档中的小修复。作者:Justin Pryzby 讨论:https://postgr.es/m/CAFp7Qwr6_FmRM6pCO0x_a0mymOfX_Gg+FEKet4XaTGSW=LitKQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ebb5457cfa514972847a2d03b5b4fd46f69bdc9b
Atsushi Torikoshi 发送了另一个补丁修订版,以实现 pg_get_target_backend_memory_contexts() 并使其能够收集指定进程的内存上下文。
Atsushi Torikoshi 发送了另一个补丁修订版,以将 wait_start 列添加到 pg_locks 视图中。
Mark Zhao 发送了一个补丁,旨在通过在 pgoutput.c 中的 RelationIdGetRelation 之后添加缺少的 RelationClose 来修复一个错误,该错误表现为分区表上的逻辑复制非常慢并消耗大量 CPU。
Önder Kalacı 发送了另一个补丁修订版,以实现逻辑复制的行过滤。
Justin Pryzby 发送了一个补丁,以允许在 BIND 阶段报告参数值中的错误。
Pavel Stěhule 发送了另一个补丁修订版,使其可以在 PL 中编写窗口函数,并在 PL/pgsql 中实现相同的功能。
Bharath Rupireddy 发送了三个补丁的修订版,使其可以在 CTAS 中使用并行插入。
Kyotaro HORIGUCHI 发送了四个补丁修订版,旨在通过确保 Walsender 在发送历史时间线时跟踪时间线切换来修复一个错误,该错误表现为备用服务器无法跟随时间线切换。
Peter Smith 发送了四个补丁修订版,使其可以使用多个 tablesync 工作程序。
Dilip Kumar 发送了补丁的另一个修订版本,用于添加自定义表压缩方法的选项。
Dmitry Dolgov 发送了补丁的另外三个修订版本,用于为 JSONB 操作使用通用下标基础设施。
Justin Pryzby 发送了补丁的另一个修订版本,用于支持 pg_dump 中多种压缩方法和相关选项。
Masahiko Sawada 发送了一个补丁,引入了一个 IndexAM API 用于选择索引清理策略,使用相同的策略来选择索引清理策略,并在索引没有增长时跳过 btree bulkdelete。
Thomas Munro 发送了补丁的另一个修订版本,用于减少 WaitEventSet 系统调用的频繁调用。
Pavel Stěhule 发送了一个补丁,用于添加一个选项,在 PL/pgsql 中使用简写来引用参数和局部变量。
Dmitry Dolgov 发送了补丁的另一个修订版本,用于防止 ArrayExpr 中的每个元素混杂,以防止 pg_stat_statements 为本质上相似的查询生成不同的条目。
Tom Lane 发送了一个 PoC 补丁,用于处理 MacOS 的 SIP 基础设施如何处理动态库。
Amit Kapila 发送了一个补丁,用于跟踪逻辑复制中 2PC 遗漏的某些情况的回滚的复制源进度。
Paul Martinez 发送了一个补丁,用于在引用完整性触发器中添加部分外键更新。
Bruce Momjian 发送了补丁的另外两个修订版本,用于合并 /common 中更多的十六进制函数。
Shinya Kato、Masahiko Sawada 和 Fujii Masao 交换了补丁,以完善 psql 中 CLOSE、FETCH 和 MOVE 的制表符补全的实现。
Daniel Gustafsson 发送了补丁的另外两个修订版本,用于支持在运行的集群上启用和禁用校验和。
Tsutomu Yamada 和 Tomáš Vondra 交换了补丁,以向 psql 添加一个以 \dX 开头的一系列函数,用于处理扩展统计信息。
Bharath Rupireddy 发送了补丁的另外两个修订版本,用于添加一个 postgres_fdw 函数来丢弃缓存的连接,添加一个 postgres_fdw.keep_connections GUC 来控制连接是否被缓存,并添加一个类似的服务器级 keep_connection GUC。
Ryo Matsumura 在 libpq 跟踪补丁的基础上发送了一个补丁,修复了其中的一些疏忽。
Kyotaro HORIGUCHI 发送了补丁的另一个修订版本,旨在修复在 WAL 重放期间由于在截断成功后延迟检查点完成而表现为损坏的错误。
Greg Sabino Mullane 发送了补丁的另一个修订版本,以使 psql 的 \df 可以按输入类型选择函数。
Movead Li 发送了补丁的另一个修订版本,用于修复 WAL 切换的 waldump 大小。
Kirk Jamison 发送了补丁的另一个修订版本,以使用 dlist 使删除关系缓冲区更有效。
Michaël Paquier 发送了补丁的另一个修订版本,以将 SHA1 添加到 cryptohash 基础设施中。
Julien Rouhaud 发送了补丁的另一个修订版本,用于将 pg_stat_statements 查询混杂移动到核心,在 pg_stat_activity 和 log_line_prefix 中公开 queryid,并在详细的解释中公开查询标识符。
Laurenz Albe 发送了补丁的另外两个修订版本,以向 pg_stat_database 添加会话统计信息。
Zeng Wenjing 发送了一个 PoC 补丁,以实现全局索引。
Bharath Rupireddy 发送了补丁的另外三个修订版本,以实现 REFRESH MATERIALIZED VIEW 的 EXPLAIN [ANALYZE]。
Masahiko Sawada 发送了一个补丁,旨在修复由于逻辑复制工作进程在错误上下文回调中访问目录而表现出来的错误,方法是将本地和远程类型名称都存储在 SlotErrCallbackArg 中,以便只需在错误回调中设置名称,而无需系统缓存查找。
Vigneshwaran C 发送了一个补丁,为 PUBLICATION 添加模式级支持。
Mark Dilger 发送了补丁的另外两个修订版本,添加了一个新的 pg_amcheck contrib 模块,这是一个命令行界面,用于针对表和索引运行 amcheck 的验证。
Thomas Munro 发送了一个补丁,将 FreeBSD 添加到具有 fdatasync 的平台列表中。
Kyotaro HORIGUCHI 发送了补丁的另一个修订版本,通过将统计收集器用于临时存储的文件替换为共享内存,使其更有效率。
Michaël Paquier 发送了补丁的另一个修订版本,以重构 HMAC 实现以减少重复代码。
Pavel Stěhule 发送了补丁的另一个修订版本,以减少 PL/pgSQL 中以非原子模式执行 CALL 语句的开销。
Kyotaro HORIGUCHI 发送了补丁的另一个修订版本,使 ALTER TABLE SET [UN]LOGGED 避免堆重写,当 wal_level > minimal 时更改 SET LOGGED,以便它使用 XLOG_FPI 而不是大量 HEAP_INSERT 发出 WAL,并允许清理在创建它的事务崩溃时遗留的文件。
Pavel Stěhule 发送了一个补丁,添加了一种将变量内容的文本值返回到 PL/pgsql 调试 API 的方法。
Pavel Stěhule 发送了一个补丁,使 psql 的 \watch 命令可以使用特殊的寻呼机。
Tomáš Vondra 发送了补丁的另一个修订版本,使在表达式上创建扩展统计信息成为可能。
Simon Riggs 发送了补丁的另外四个修订版本,以实现系统版本化表。
Peter Eisentraut 发送了 pageinspect 的另一个修订版本,该版本将块号参数的类型更改为 bigint,以避免溢出。
Bruce Momjian 发送了补丁的另外四个修订版本,用于为密钥管理添加测试。
Álvaro Herrera 和 Tomáš Vondra 交换了补丁,以实现 MERGE。
Pavel Stěhule 和 Erik Rijkers 交换了补丁,以实现模式变量。
Álvaro Herrera 和 Justin Pryzby 交换了补丁,以实现 ALTER TABLE ... DETACH PARTITION CONCURRENTLY。
Noah Misch 发送了一个补丁,用于修复 pg_dump 中初始权限中的 GRANT OPTION。
Krasiyan Andreev 发送了补丁的另一个修订版本,以实现窗口函数的 NULL 处理。
Michael Banck 发送了一个补丁,用于修复当相关查询不返回行时 psql 的 \watch 无法正常工作的问题。
Thomas Munro 发送了一个补丁,在 pg_test_fsync 中使用 pg_pwrite(),以保持与 PostgreSQL 现在所做操作的一致性。
Justin Pryzby 发送了补丁的另一个修订版本,以修复在 libpq 中实现可插拔压缩的补丁中的一些文档和注释。
Noah Misch 发送了补丁的另一个修订版本,旨在修复由于 SimpleLruTruncate() 舍入而表现为虚假“明显环绕”的错误。
Shenhao Wang 发送了一个补丁,旨在修复由于读取 backup_label 和 tablesapce_map 时设置文本模式而导致 Windows 上文件 backup_label 问题中出现无效数据的错误。
Tatsuo Ishii 发送了一个补丁,以修复文档中缺少首字母缩略词标签。
Tomáš Vondra 发送了补丁的另一个修订版本,以在 COPY FREEZE 中设置 PD_ALL_VISIBLE 和可见性映射位,从而弥补缺少页面级标志更新的不足。
Tom Lane 发送了一个补丁,旨在修复由于非热备模式下连接字符串中的多个主机未能进行故障转移而表现出来的错误。