Pgpool-II 4.2.0 发布,这是一个用于 PostgreSQL 的连接池和语句复制系统。https://www.pgpool.net/docs/42/en/html/release-4-2-0.html
pgBadger v11.4 发布,这是一个用 Perl 编写的 PostgreSQL 日志分析器和图形工具。https://github.com/darold/pgbadger/releases
Database Lab 2.0 发布,这是一个用于快速克隆大型 PostgreSQL 数据库以构建非生产环境的工具:https://postgres.ai/blog/dle-2.0-release/
pgagroal 1.0.0 发布,这是一个用于 PostgreSQL 的高性能协议原生连接池。https://agroal.github.io/pgagroal/release/announcement/2020/11/24/pgagroal-1.0.0.html
http://archives.postgresql.org/pgsql-jobs/2020-11/
Planet PostgreSQL: http://planet.postgresql.org/
本周的 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间下午 3:00 前(周日)将新闻和公告提交至 david@fetter.org。
Tom Lane 推送了
允许多行 INSERT 为生成的列指定 DEFAULT。可以使用 "INSERT INTO tab(generated_col) VALUES (DEFAULT)" 而不会引发错误。但是,多行 VALUES 列表的等效情况总是会引发错误,即使在每行中都正确地声明了 DEFAULT。修复此问题。同时,改进了有关 OVERRIDING SYSTEM/USER 值的附近逻辑的测试用例。Dean Rasheed 讨论:https://postgr.es/m/9q0sgcr416t.fsf@gmx.us https://git.postgresql.org/pg/commitdiff/17958972fe3bb03454a4b53756b29d65dc285efa
改进了与生成的列相关的两个错误消息的措辞。明确指出,只要插入的是 DEFAULT 占位符,就可以“插入”到生成的列中。此外,使用 ERRCODE_GENERATED_ALWAYS 代替 ERRCODE_SYNTAX_ERROR;似乎没有任何理由使用不太具体的错误代码。讨论:https://postgr.es/m/9q0sgcr416t.fsf@gmx.us https://git.postgresql.org/pg/commitdiff/d36228a9fcdccd57a7dc332572eb9837c7c301e6
重命名 “点严格高于/低于点” 的比较运算符。历史上,它们被称为 >^ 和 <^,但这与类似的框、多边形和圆运算符不一致,后者分别命名为 |>> 和 <<|。更糟糕的是,>^ 和 <^ 名称用于框类型的非严格高于/低于测试。因此,根据更常见的命名发明新的运算符。旧的运算符现在仍然可用,并且仍然被相关的索引操作类接受。但是有一个弃用通知,所以也许我们有一天可以摆脱它们。Emre Hasegeli,由 Pavel Borisov 审核。讨论:https://postgr.es/m/24348.1587444160@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/0cc99327888840f2bf572303b68438e4caf62de9
删除不必要的 #include。Justin Pryzby 讨论:https://postgr.es/m/20201123205505.GJ24052@telsasoft.com https://git.postgresql.org/pg/commitdiff/3b9b01f75d6e2d7bf9e0bf8ec958ce420aa037c2
集中跳过无用 ereport/elog 调用的逻辑。虽然当错误消息级别太低而无法打印时,ereport() 和 elog() 本身非常便宜,但某些地方需要在调用这些宏之前做大量的工作。为了在不打印任何内容时优化掉这些设置工作,使 elog.c 导出一个新函数 message_level_is_interesting(elevel),该函数报告 ereport/elog 是否会执行任何操作。在各种地方利用它,这些地方对 log_min_messages 等进行了临时直接测试。还教 ProcSleep 使用它以避免一些工作。(可能还有其他地方可以有效地使用它;我没有仔细搜索。)在 elog.c 中,稍微重构一下以避免重复策略设置逻辑的副本。当编写该代码时,我们不依赖于内联函数的可用性;因此为了效率,它有一些重复的地方,我将其删除了。Alvaro Herrera 和 Tom Lane 讨论:https://postgr.es/m/129515.1606166429@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/789b938bf2b8e38d0894261eae6bc84bbbb4714e
在内联函数的声明上放置 “inline” 标记。我很难说 C 标准的字面意思是否要求这样做,但是我们确实有一些构建场成员在未完成此操作时会发出警告。c532d15dd 中的疏忽。https://git.postgresql.org/pg/commitdiff/ec05bafdbbf474bf0a1416772da31f9f1f27fa1e
避免向客户端发送多个 ParameterStatus 消息。到目前为止,当任何 GUC_REPORT 变量的活动值发生任何更改时,我们会立即向客户端发送 ParameterStatus 消息。当该功能设计出来时,这勉强可以接受;现在我们有了函数 SET 子句之类的内容,在查询中 GUC_REPORT 变量可能会多次更改,甚至可能最终回到其原始值,这在用例中非常合理。幸运的是,我们的大多数 GUC_REPORT 变量不太可能经常更改;但是,目前有一些扩大该集合的提案,甚至使其可由用户配置。因此,让我们修复这些问题,使每个查询中每个变量生成的 ParameterStatus 消息不超过一条,并且除非查询结束值与我们上次报告的值不同,否则不发送任何消息。讨论:https://postgr.es/m/5708.1601145259@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/2432b1a04087edc2fd9536c7c9aa4ca03fd1b363
文档:对第 11.2 节“索引类型”进行小的改进。将每个索引类型的讨论分解为 <sect2>,以便在视觉上更加分离并且更容易找到。改进标记,并进行一些小的措辞调整。这还修复了对现已弃用的点运算符 <^ 和 >^ 的一个多余引用。Dagfinn Ilmari Mannsåker,由 David Johnston 和 Jürgen Purtz 审核。讨论:https://postgr.es/m/877dukhvzg.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/85b4ba73423b480902206ca04330c1cbea371c3c
在 psql 的 \d 命令中,不要截断属性默认值。历史上,psql 将列的默认表达式的文本截断为 128 个字符。这与 describe.c 中的任何其他行为都不同,而且现在限制仅应用于表达式本身,而不应用于可能包裹它的 "generated always as (...) stored" 文本时,它变得特别令人困惑。在我们的 git 历史中挖掘表明,此限制的最初动机并不是真正为了限制显示宽度(正如我长期以来认为的那样),而是为了安全地使用固定宽度的输出缓冲区来存储结果。当然,这种实现限制早已不复存在,但限制仍然存在。让我们摆脱它。同时,重新排列关于何时释放输出字符串的逻辑,使其不那么依赖于关于 attidentity 和 attgenerated 的可能值的未声明的假设。根据 David Turon 的 bug #16743。向 v12 回溯补丁,其中 GENERATED 出现在那里。(可以说我们可以将其进一步回溯,但是我不想为此更改长期稳定的分支的行为。)讨论:https://postgr.es/m/16743-7b1bacc4af76e7ad@postgresql.org https://git.postgresql.org/pg/commitdiff/314fb9baeacb3426a5d9a26132aae8d828cc0ad7
修复最近在 LISTEN/NOTIFY 处理中引入的竞争条件。Commit 566372b3d 修复了一些涉及并发 SimpleLruTruncate 调用的竞争条件,但在 async.c 中引入了新的竞争条件。新监听的后端可能会尝试读取正在截断的 Notify SLRU 页面,从而可能导致错误。此外,QUEUE_TAIL 指针可能会设置为不等于任何后端的队列位置的值。虽然这在 v13 及更高版本中是相当无害的(感谢 commit 51004c717),但在旧版本中,它会导致队列截断逻辑几乎永久禁用,因此继续使用 NOTIFY 会导致队列填充警告,并最终导致无法发送更多通知。(服务器重启足以使其消失,但这仍然非常令人不快。)问题的核心是对 QUEUE_TAIL 代表队列的“逻辑”尾部(即,最旧的仍然有趣的数据)还是“物理”尾部(我们尚未截断的最旧数据)感到困惑。为了修复,将其拆分为两个变量。QUEUE_TAIL 重新定义为逻辑尾部,并且我们引入了一个新变量来跟踪最旧的未截断页面。根据 Mikael Gustavsson 的报告。与之前的补丁一样,回溯到所有受支持的分支。讨论:https://postgr.es/m/1b8561412e8a4f038d7a491c8b922788@smhi.se https://git.postgresql.org/pg/commitdiff/9c83b54a9ccdb111ce693ada2309475197c19d70
清理 src/test/locale/ 中的测试后。257836a75 中的疏忽,添加了这些测试。https://git.postgresql.org/pg/commitdiff/b90a7fe15f78b1e2513cbcb27a33f4adc47bcd3d
文档:澄清 PQconnectdbParams() 的行为。文档中遗漏了一个关键细节:如果关键字数组条目对应的数值数组条目为 NULL 或空字符串,则该条目会被直接忽略;它不会覆盖该参数先前获得的任何值。(请参阅 conninfo_array_parse()。)我原以为这会将设置强制恢复为默认值,这导致了我遇到了 bug #16746;但事实并非如此。趁着这个机会,我忍不住对 PQconnectdbParams() 的描述以及关于连接 URI 语法的章节进行了一些文字编辑。讨论:https://postgr.es/m/931505.1606618746@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/d5e2bdf7dda712a60234f08e036ec9de28085a2d
Heikki Linnakangas 推送了
将 copy.c 分割成四个文件。Copy.c 文件已经变得非常庞大。将其分割成更易于管理的部分:- copy.c 现在只包含 COPY FROM 和 COPY TO 共用的几个函数。- copyto.c 包含 COPY TO 的代码。- copyfrom.c 包含初始化 COPY FROM 的代码,并将元组插入到正确的表中。- copyfromparse.c 包含从客户端/文件/程序读取,并将输入的文本/CSV/二进制格式解析为元组的代码。所有这些部分都相当复杂,并且彼此相对独立。目前正在讨论一个补丁,以实现并行 COPY FROM,这将为 COPY FROM 路径添加大量新代码,另一个补丁将允许 INSERT 使用与 COPY FROM 相同的多重插入机制,这两者都需要重构代码。有了这两个补丁,无论如何 copy.c 中都会有很多代码改动,所以现在似乎是进行重构的好时机。CopyStateData 结构也被分割了。所有格式选项,如 FORMAT、QUOTE、ESCAPE,都放在一个新的 CopyFormatOption 结构中,该结构被 COPY FROM 和 TO 共用。其他状态数据保存在单独的 CopyFromStateData 和 CopyToStateData 结构中。复审人:Soumyadeep Chakraborty、Erik Rijkers、Vignesh C、Andres Freund 讨论:https://postgresql.ac.cn/message-id/8e15b560-f387-7acc-ac90-763986617bfb%40iki.fi https://git.postgresql.org/pg/commitdiff/c532d15dddff14b01fe9ef1d465013cb8ef186df
修复了一些引用 copy.c 的注释。在上一个提交中遗漏了这些。https://git.postgresql.org/pg/commitdiff/68b1a4877ef54f5ee6e05c64876655dd13d2c73b
将每个聚合和每个转换的重复查找移动到规划器。这样做的好处是,聚合的成本估算可以正确计算对转换和最终函数的调用次数。提高目录版本,因为视图可以包含 Aggrefs。复审人:Andres Freund 讨论:https://postgresql.ac.cn/message-id/b2e3536b-1dbc-8303-c97e-89cb0b4a9a48%40iki.fi https://git.postgresql.org/pg/commitdiff/0a2bc5d61e713e3fe72438f020eea5fcc90b0f0b
修复预期输出:聚合权限检查的顺序已更改。提交 0a2bc5d61e 更改了在聚合的最终函数和转换函数上检查权限的顺序。这会显示为此 sepgsql 回归测试中打印的 LOG 消息顺序的差异。调整预期输出。根据 buildfarm 中 rhinoceros 的失败报告进行修复。https://git.postgresql.org/pg/commitdiff/8818ad5b1557d42cd58e5196fac7084a2389bdad
Álvaro Herrera 推送了
使一些健全性检查 elog 更加详细。funcapi.c 中的一些健全性检查没有提及所有可能的失败原因,这让那些错误地添加目录数据的开发人员感到困惑。使错误更加详细,以避免浪费时间来找出错误。根据 Craig Ringer 的投诉进行修复。复审人:Tom Lane tgl@sss.pgh.pa.us 讨论:https://postgr.es/m/CAMsr+YH7Kd87A3cU5m_wKo46HPQ46zFv5wesFNL0YWxkGhGv3g@mail.gmail.com https://git.postgresql.org/pg/commitdiff/fe051291550ab88267ce3104e9833925bf757393
在极少数情况下,不要比需要的更长时间持有 ProcArrayLock。在取消自动清理工作进程时,我们在格式化调试日志字符串时持有 ProcArrayLock。我们可以通过保存生成消息所需的数据并在锁定的区域外进行格式化来缩短此过程。这并不是非常关键,因为它只会在很少的情况下发生:当后端运行死锁检测并且恰好被运行自动清理的自动清理阻塞时。不过,没有必要在 ProcArrayLock 处理中引起中断,在某些情况下,ProcArrayLock 的处理量可能非常大。同时,重构代码,以便我们只在真正要使用该字符串时才打印它,正如 Michael Paquier 所建议的那样。讨论:https://postgr.es/m/20201118214127.GA3179@alvherre.pgsql 复审人:Michael Paquier michael@paquier.xyz https://git.postgresql.org/pg/commitdiff/450c8230b1f7eed1e927c44fb710d80502bea1d2
避免并发索引中的虚假等待。在 CREATE INDEX CONCURRENTLY (CIC) 和 REINDEX CONCURRENTLY (RC) 的各种等待阶段中,我们等待其他进程释放它们的快照;这通常是为了确保正确性所必需的。但是,在其他表中执行 CIC 的进程不可能影响在“此”表中执行的 CIC 或 RC,因此我们不需要等待这些进程。此提交在 MyProc->statusFlags 中添加了一个标志,以指示当前进程正在执行 CIC,以便其他执行 CIC 或 RC 的进程在等待时可以忽略它。请注意,只有当索引不访问其他表时,此逻辑才有效。为简单起见,如果索引的列是表达式或具有 WHERE 谓词,则我们避免设置该标志。(可以有不访问其他表的表达式索引或部分索引,但要找出这一点需要做更多的工作。)此标志也可能被执行 REINDEX CONCURRENTLY 的进程跳过;并且被 VACUUM 用于忽略 CIC 或 RC 中的进程,以便计算 Xmin。这将在未来的提交中处理。作者:Álvaro Herrera alvherre@alvh.no-ip.org 作者:Dimitry Dolgov 9erthalion6@gmail.com 复审人:Michael Paquier michael@paquier.xyz 讨论:https://postgr.es/m/20200810233815.GA18970@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/c98763bf51bf610b3ee7e209fc76c3ff9a6b3163
恢复用于更新 statusFlags 的锁级别。还原 27838981be9d(保留一些注释)。根据讨论,放松用于此处的锁级别似乎是不安全的;为了使其安全,在我们设置标志的点和我们设置事务 Xid 的点之间必须有内存屏障,这可能不会太糟糕;但是,在读取器端也必须有屏障,这从性能角度来看可能是不好的。现在也许这种分析是错误的,并且出于某种原因它是安全的,但证明这一点并不容易。讨论:https://postgr.es/m/20201118190928.vnztes7c2sldu43a@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/dcfff74fb16622898a9d1df33e530f477caab095
David Rowley 推送了
定义 pg_attribute_cold 和 pg_attribute_hot 宏。对于支持 __has_attribute 和 __has_attribute (hot/cold) 的编译器。gcc >= 5、clang >= 2.9 和 icc >= 17 支持 __has_attribute。后续提交将实现这些宏的一些用法。作者:David Rowley 复审人:Andres Freund、Peter Eisentraut 讨论:https://postgr.es/m/CAApHDvrVpasrEzLL2er7p9iwZFZ%3DJj6WisePcFeunwfrV0js_A%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/697e1d02f53f985992a4f479b0b08fca5c272c6c
改进 elog/ereport ERROR 调用中的编译器代码布局。在这里,我们使用一些预处理器技巧来诱使支持的编译器布局它们生成的代码,以便与 elog(ERROR)/ereport(ERROR) 调用在同一分支中的代码从热路径移开。实际上,这减少了热代码的大小,这意味着它可以位于更少的缓存行上。在使用 pgbench 的 TPC-b 基准测试的高度 CPU 绑定的工作负载中,已经看到了 10-15% 的性能改进。这里实现的效果与将错误条件放在 unlikely() 宏内非常相似。例如;if (unlikely(x < 0)) elog(ERROR, "invalid x value"); 现在不需要在这里使用 unlikely(),因为 elog 和 ereport 使用的公共宏现在会看到 elevel >= ERROR 并使用 errstart() 的 pg_attribute_cold 标记版本。当 elevel < ERROR 或无法确定为常量时,将保持原始行为。作者:David Rowley 复审人:Andres Freund、Peter Eisentraut 讨论:https://postgr.es/m/CAApHDvrVpasrEzLL2er7p9iwZFZ%3DJj6WisePcFeunwfrV0js_A%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/913ec71d682e99852cc188a7edbdccd02d42b4b3
修复了 __has_attribute 的不可移植用法。这应该修复由 697e1d02f 引起的破坏,它似乎破坏了 GCC 版本 < 5 的构建。根据 GCC 手册,__has_attribute 似乎是一个“特殊运算符”,必须在预处理器测试中进行测试,而无需任何其他条件。根据 Greg Nancarrow 从 GCC 手册得到的建议。报告人:Greg Nancarrow 讨论:https://postgr.es/m/CAJcOf-euSu8fhC10v476o9dqnjqKysVs1_vRms-_fvajpZ3kFw@mail.gmail.com https://git.postgresql.org/pg/commitdiff/1fa22a43a56e1fe44c7bb3a3d5ef31be5bcac41d
整理 pg_attribute_hot 和 pg_attribute_cold 的定义。1fa22a43a 是对我引入到 697e1d02f 中的可移植性问题的快速修复。1fa22a43a 为预处理器逻辑添加了一些比我想要的更多的案例。Andres Freund 和 Dagfinn Ilmari Mannsåker 提出了一种更好的方法来做到这一点。顺便提一下,还调整了这些宏的当前唯一用法,以便该宏位于函数声明中的函数返回类型之前。现在这与函数的定义一致。讨论:https://postgr.es/m/20200625163553.lt6wocbjhklp5pl4@alap3.anarazel.de 讨论:https://postgr.es/m/87pn43bmok.fsf@wibble.ilmari.org https://git.postgresql.org/pg/commitdiff/b0727ae99b7056ca88e9708c014a86f6e611d938
针对 MinGW 8.1 中 attribute((cold)) 编译器错误的临时修复。buildfarm 动物 walleye,运行 MinGW 8.1,自从 697e1d02f 和 913ec71d6 进入以来一直存在问题。这似乎是汇编程序中的一个错误,该错误在更高版本中得到了修复。现在,为了使该动物再次运行为绿色,让我们在那个编译器上将 pg_attribute_cold 和 pg_attribute_hot 定义为空宏。希望我们能够得到该动物所有者的支持,以升级到错误较少的编译器,并在稍后日期恢复此操作。讨论:https://postgr.es/m/286560.1606233316@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/687f6163447514c23b44a981540987013529a9ec
Michaël Paquier 推送了
使用宏而不是硬编码的偏移量进行 LWLock 初始化。这使得代码更容易理解,因为初始化依赖于一个与已定义的等效宏集重叠的偏移量,该宏集已在其他地方使用。作者:Japin Li 讨论:https://postgr.es/m/MEYP282MB1669FB410006758402F2C3A2B6E00@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM https://git.postgresql.org/pg/commitdiff/d03d7549b29236e300aceac0c22173cf19acc675
移除目录函数 currtid()。 currtid() 和 currtid2() 是一组未文档化的函数,其唯一已知的用户是 Postgres ODBC 驱动程序,能够为这些函数的调用者提供的元组检索最新的 TID 版本。按照 Postgres ODBC 的使用方式,currtid() 是一个快捷方式,能够在元组插入后,通过传递 OID 为 0 (魔术值) 来检索加载到后端中的最后一个 TID。此提交中将其移除,因为它在驱动程序开始使用带有插入语句的“RETURNING ctid”之后变得过时,该子句自 Postgres 8.2 开始支持(无论如何,使用 RETURNING 在性能上更好,因为它减少了与后端之间的往返次数)。驱动程序仍然使用 currtid2(),因此该函数暂时保留。请注意,出于向后兼容性的原因,此函数保持其原始形态。经过与包括 Andres Freund、Peter Eisentraut、Álvaro Herrera、Hiroshi Inoue、Tom Lane 和我自己在内的许多人的讨论。升级目录版本。讨论:https://postgr.es/m/20200603021448.GB89559@paquier.xyz https://git.postgresql.org/pg/commitdiff/7b94e999606e2e2e10d68d544d49fc5a5d5785ac
藤井正雄提交
文档:从一些索引项中删除不必要的空格字符。以前,一些索引项在文档中具有 “ ,”(即,空格 + 逗号),如下所示。由于逗号前的空格字符是不必要的,因此本次提交将其删除,以与其他索引项保持一致。 parallel_leader_participation 配置参数, 其他规划器选项 作者:藤井正雄 审阅人:Euler Taveira 讨论:https://postgr.es/m/e87b4ddf-1498-2850-bf55-519df3928fd4@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/e522024bd8dd28a0f13dcccfd39170698f45c939
文档:添加有关准备好的语句的重新分析和重新规划的描述。每当语句中使用的数据库对象发生了定义更改,或者它们的规划器统计信息已更新时,都会对准备好的语句进行重新分析和重新规划。前者以前已经记录在案,但后者以前没有。本次提交将有关后一种情况的描述添加到文档中。作者:鳥越 篤史 审阅人:Andy Fan, 藤井正雄 讨论:https://postgr.es/m/3ac82f4817c9fe274a905c8a38d87bd9@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/4a36eab79a193700b7b65baf6c09c795c90c02c6
pg_stat_statements:跟踪 pgss 条目被释放的次数。如果观察到的不同语句多于 pg_stat_statements.max,则会释放关于执行次数最少的语句的 pg_stat_statements 条目。本次提交使我们能够跟踪这些条目被释放的总次数。该数字可以在本次提交添加的 pg_stat_statements_info 视图中查看。在调整 pg_stat_statements.max 参数时,它很有用。如果它很高,即条目释放非常频繁,这可能会导致性能下降,我们可以增加 pg_stat_statements.max 以避免这些频繁的释放。pg_stat_statements_info 视图旨在显示 pg_stat_statements 模块本身的统计信息。目前,它只有一个名为“dealloc”的列,表示条目被释放的次数。但是即将到来的补丁将向该视图添加其他列(例如,上次重置 pg_stat_statements 统计信息的时间)。作者:桂 裕太, 清野 祐貴 审阅人:藤井正雄 讨论:https://postgr.es/m/0d9f1107772cf5c3f954e985464c7298@oss.nttdata.com https://git.postgresql.org/pg/commitdiff/9fbc3f318d039c3e1e8614c38e40843cf8fcffde
在 worker_spi 中使用标准的 SIGHUP 和 SIGTERM 信号处理程序。以前,worker_spi 对 SIGHUP 和 SIGTERM 使用其自定义信号处理程序。本次提交使 worker_spi 使用标准信号处理程序,以简化代码。请注意,die() 用作 worker_spi 中的标准 SIGTERM 信号处理程序,而不是 SignalHandlerForShutdownRequest() 或 bgworker_die()。以前的退出处理只能从主循环内部退出,而不能从它调用的后端代码内部退出。这就是为什么这里需要使用 die() 的原因,以便 worker_spi 可以在执行查询时响应 SIGTERM 信号。也许我们可以说 worker_spi 在查询执行期间无法响应 SIGTERM 是一个错误。但是由于 worker_spi 只是后台工作代码的示例,因此我们不进行向后移植。感谢 Craig Ringer 报告和调查此问题。作者:Bharath Rupireddy 审阅人:藤井正雄 讨论:https://postgr.es/m/CALj2ACXDEZhAFOTDcqO9cFSRvrFLyYOnPKrcA1UG4uZn9hUAVg@mail.gmail.com 讨论:https://postgr.es/m/CAGRY4nxsAe_1k_9g5b47orA0S011iBoHsXHFMH7cg7HV0O1bwQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2a0847720ae6fa4180bfbe404e4e6bbf2f737708
在 test_shm_mq worker 中使用标准的 SIGTERM 信号处理程序 die()。以前,test_shm_mq worker 使用 die() 的精简版本作为 SIGTERM 信号处理程序。本次提交使其改用 die(),以简化代码。就代码而言,die() 和以前使用的精简版本之间的区别在于信号处理程序是否可以直接调用 ProcessInterrupts()。但是这种差异在后台工作进程中不存在,因为在 bgworker 中,DoingCommandRead 标志永远不会为真,并且 die() 永远不会直接调用 ProcessInterrupts()。因此,test_shm_mq worker 可以像其他 bgworker 进程(例如,逻辑复制应用启动器或 autoprewarm worker)当前所做的那样安全地使用 die()。感谢 Craig Ringer 报告和调查此问题。作者:Bharath Rupireddy 审阅人:藤井正雄 讨论:https://postgr.es/m/CAGRY4nxsAe_1k_9g5b47orA0S011iBoHsXHFMH7cg7HV0O1bwQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/ef848f4ac5a4bd072c65867186268775acfb4298
修复 CLUSTER 报告的扫描块数的进度。以前,pg_stat_progress_cluster 视图将堆扫描中的当前块号报告为已扫描的堆块数 (即 heap_blks_scanned)。当启用 synchronize_seqscans 时,此报告的数字可能不正确,因为它允许堆扫描从中间的块开始。当堆扫描环绕时,这可能会导致 heap_blks_scanned 列中出现环绕。本次提交通过计算从堆扫描开始的块到扫描中的当前块的块数,并在 heap_blks_scanned 列中报告该数字来修复此错误。此外,在 pg_stat_progress_cluster 视图中,如果扫描的最后一页为空,则 heap_blks_scanned 以前在堆扫描阶段结束时无法达到 heap_blks_total。本次提交通过在堆扫描阶段结束时手动将 heap_blks_scanned 更新为与 heap_blks_total 相同的值来修复此错误。向后移植到引入 pg_stat_progress_cluster 视图的 v12。报告人:Matthias van de Meent 作者:Matthias van de Meent 审阅人:藤井正雄 讨论:https://postgr.es/m/CAEze2WjCBWSGkVfYag001Rc4+-nNLDpWM7QbyD6yPvuhKs-gYQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/3df51ca8b39f08ef19a77b9776f2547c86b70c49
Andrew Gierth 提交
Amit Kapila 提交
删除 ri_PlanCheck 顶部的过时注释。提交 5b7ba75f7f 删除了未使用的参数,但忘记更新附近的注释。作者:李佳斌 向后移植:13,在该版本中引入了它 讨论:https://postgr.es/m/0E2F62A2-B2F1-4052-83AE-F0BEC8A75789@hotmail.com https://git.postgresql.org/pg/commitdiff/805b816305b62cb3e2670418ced8f7184a2d29c7
在更多地方使用枚举作为逻辑复制消息类型。提交 644f0d7cc9 添加了逻辑复制消息类型枚举以代替字符文字,但忽略了一些字符替换。作者:Peter Smith 审阅人:Amit Kapila 讨论:https://postgr.es/m/CAHut+PsTG=Vrv8hgrvOnAvCNR21jhqMdPk2n0a1uJPoW0p+UfQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f3a8f73ec274bf8cc6066ea315f1a5a022214b02
修复 tablesync worker 中正在进行的事务的复制。tablesync worker 在单个事务下运行,但在流模式下,我们在 stream_stop、stream_abort 和 stream_commit 上提交事务。我们需要避免在 tablesync worker 的流模式下提交事务。在传递时,将对 apply_handle_stream_commit 中 stream 文件进行清理之后,调用 process_syncing_tables。这将允许在 tablesync worker 退出之前发生文件清理,否则将由 proc 退出例程之一处理。作者:Dilip Kumar 审阅人:Amit Kapila 和 Peter Smith 测试人:Peter Smith 讨论:https://postgr.es/m/CAHut+Pt4PyKQCwqzQ=EFF=bpKKJD7XKt_S23F6L20ayQNxg77A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/0926e96c493443644ba8e96b5d96d013a9ffaf64
Thomas Munro 提交
Peter Eisentraut 提交
使 bind() 失败的错误提示更加准确。对于确实是关于其他已在使用该地址的错误,才应打印提示“是否已有另一个 postmaster 正在运行...” 。在其他情况下,这是具有误导性的。因此,仅当 errno == EADDRINUSE 时才显示该提示。此外,由于文件系统命名空间中的 Unix 域套接字永远不会为现有文件报告 EADDRINUSE(它们只会覆盖它),因此提示中说“如果不是,请删除套接字文件 \"%s\" 并重试。” 的部分永远不会发生,因此将其删除。抽象命名空间中的 Unix 域套接字可以报告 EADDRINUSE,但在这种情况下,没有要删除的文件,因此该提示在那里也不起作用。审阅人:Michael Paquier michael@paquier.xyz 讨论:https://postgresql.ac.cn/message-id/flat/6dee8574-b0ad-fc49-9c8c-2edc796f0033@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/d5d91acdccae6b322a5634be2c66d62fc6b9a43d
添加对抽象 Unix 域套接字的支持。这是普通 Unix 域套接字的一种变体,它不使用文件系统,而是使用单独的“抽象”命名空间。在用户界面上,此类套接字由以“@”开头的名称表示。目前在 Linux 和 Windows 上受支持。审阅人:Michael Paquier michael@paquier.xyz 讨论:https://postgresql.ac.cn/message-id/flat/6dee8574-b0ad-fc49-9c8c-2edc796f0033@2ndquadrant.com https://git.postgresql.org/pg/commitdiff/c9f0624bc2f544baacafa38e3797d5323401d039
文档:修复错别字。作者:Justin Pryzby pryzby@telsasoft.com 讨论:https://postgresql.ac.cn/message-id/20201121194105.GO24784@telsasoft.com https://git.postgresql.org/pg/commitdiff/2fbd786c3446b1bc90f396d3fa5f4614b0a57d89
tablefunc: 拒绝传递给 normal_rand() 的负数元组数量。该函数将第一个参数,即要返回的元组数量,转换为一个无符号整数,当传递负值时,该整数会变成一个巨大的数字。这会导致函数执行时间过长。相反,应该拒绝负值。(如果有人真的想生成更多结果行,他们应该考虑添加 bigint 或 numeric 变体。) 同时,改进 SQL 测试以测试此函数返回的元组数量。作者:Ashutosh Bapat ashutosh.bapat@2ndquadrant.com 讨论:https://postgresql.ac.cn/message-id/CAG-ACPW3PUUmSnM6cLa9Rw4BEC5cEMKjX8Gogc8gvQcT3cYA1A@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f73999262ed6c40d9a7c3d7cccec7143d4d15287
Noah Misch 推送了
Amul Sul 提交了另一个补丁修订版,以实现 ALTER SYSTEM READ {ONLY|WRITE}。
Daniel Vérité 提交了另一个补丁修订版,以在 libpq 中实现批处理/管道处理。
Justin Pryzby 和 Tomáš Vondra 交换了补丁,以实现表达式的扩展统计信息。
Álvaro Herrera 提交了另一个补丁修订版,以避免 brin 汇总中的错误,当索引同时被重新索引时可能会发生这种情况。
Álvaro Herrera 提交了一个补丁,以修复一个错误,该错误表现为 walsender 在关闭期间卡住且未关闭,从而阻止 postmaster 通过检查 XLogRecPtrIsInvalid(replicatedPtr) 是否为 true 来完成关闭循环。
Zeng Wenjing 提交了三个全球临时表实现补丁的修订版。
Bharath Rupireddy 提交了两个 postgres_fdw 连接缓存实现补丁的修订版 - 导致远程会话在本地会话退出之前一直存在。
Bharath Rupireddy 和 Heikki Linnakangas 交换了补丁,使其可以在 CREATE TABLE AS 中使用并行插入,在这样做是安全的情况下。
Tomáš Vondra 提交了另一个补丁修订版,以使用非易失性存储作为 WAL 缓冲区。
Takayuki Tsunakawa 提交了两个用于外表批量插入的补丁的修订版。
Justin Pryzby 提交了另一个补丁修订版,以允许 INSERT SELECT 使用 BulkInsertState,使 INSERT SELECT 使用 multi_insert,并动态切换到 multi-insert 模式。
Michaël Paquier 提交了另一个补丁修订版,以重构 SHA2 和加密哈希 API,将 cryptohash_openssl.c 切换为使用 EVP,并使 pgcrypto 对 EVP 使用核心资源所有者工具。
Justin Pryzby 提交了另一个补丁修订版,以允许 CLUSTER、VACUUM FULL 和 REINDEX 动态更改表空间。
Keisuke Kuroda 提交了一个补丁,通过减少 ri SPI 计划哈希的大小,修复了在具有 FK 的分区表上表现为巨大内存消耗的错误。
Konstantin Knizhnik 提交了两个 libpq 自定义压缩实现补丁的修订版。
Takamichi Osumi 提交了另一个补丁修订版,使其可以禁用 WAL 日志记录以加快批量加载速度。
Nathan Bossart 提交了两个向 CHECKPOINT 添加 FAST 选项的补丁修订版。
Amit Kapila、Ajin Cherian 和 Peter Smith 交换了实现两阶段事务逻辑解码的补丁。
David Rowley 提交了一个补丁,将 pg_attribute_cold 和 pg_attribute_hot 定义为 minGW 8.1 上的空宏,以避免该工具链中的错误。
Li Japin 提交了另一个补丁修订版,允许通过新的 GUC idle_session_timeout 来终止空闲会话,并减少调用 setitimer() 的频率。
Euler Taveira de Oliveira 提交了一个补丁,将逻辑解码消息添加到 pgoutput,在流式传输时将 xid 添加到消息,解释为什么忽略 LOGICAL_REP_MSG_MESSAGE,简化 parse_output_parameters 函数以采用整个 PGOutputData 而不是零碎的数据,调整消息的 in_streaming,并彻底检查测试以考虑所有这些。
Peter Eisentraut 提交了另一个补丁修订版,以添加 result_format_auto_binary_types 设置。
Michaël Paquier 提交了另一个补丁修订版,以修复当 pg_database 元组包含 toast 属性时,vac_update_datfrozenxid 将引发“错误的元组长度”的问题。
Kyotaro HORIGUCHI 提交了另一个补丁修订版,以修复几何类型中 NaN 的处理。
Masahiko Sawada 提交了另一个补丁修订版,以启用多个外服务器的两阶段提交。
Daniel Gustafsson 提交了另一个补丁修订版,使其可以在线启用和禁用数据校验和。
Alexander Korotkov 提交了一个补丁,以实现用于在自动化测试套件中重现并发问题的内置基础设施。该基础设施的核心是“停止事件”,这些事件是代码中的特殊位置,在某些条件下可以停止执行。
Peter Eisentraut 提交了另一个补丁修订版,以按照 SQL 标准在公共表表达式中实现 SEARCH 和 CYCLE 子句。
Thomas Munro 提交了另一个补丁修订版,以使闩锁发送更少的信号,使用 SIGURG 而不是 SIGUSR1 用于闩锁,使用 signalfd 用于 epoll 闩锁,并使用 EVFILT_SIGNAL 用于 kqueue 闩锁。
Tom Lane 提交了另一个补丁修订版,以在查询结束时报告 GUC 更改。
Peter Smith 提交了一个使用枚举表示消息类型的补丁。
David Zhang 提交了三个补丁修订版,以将表访问方法作为 pgbench 的一个选项添加。
Anastasia Lubennikova 提交了一个处理传递给 normal_rand() 的负数元组数量的补丁。
Peter Eisentraut 提交了一个 pageinspect 补丁,将块号参数更改为 bigint。
Bertrand Drouvot 提交了四个补丁修订版,使其可以通过新的 GUC log_recovery_conflict_waits 来记录备用恢复冲突等待。
Kasahara Tatsuhito 提交了三个补丁修订版,以修复大量表导致的自动清理问题。
Masahiko Sawada 提交了另一个补丁修订版,以将基本统计信息添加到 pg_stat_wal 视图。
Takamichi Osumi 提交了一个补丁,以防止在 wal_level=minimal 时,归档恢复遇到来自 WAL 的情况,并且服务器继续工作,这种情况可能会导致数据未被复制。
Euler Taveira de Oliveira 提交了一个补丁,用于在后端崩溃后删除临时文件,以避免由多次崩溃导致的 ENOSPC 条件。
Pavel Borisov 提交了另一个补丁修订版,以使用 SP-GiST 索引访问方法实现覆盖索引。
Kirk Jamison 提交了另一个补丁修订版,以防止在恢复期间在 smgrextend() 中使块无效,在 smgrnblocks() 中为缓存块添加一个 bool 参数,通过避免在关系足够小或要无效的总块数低于完全扫描阈值时扫描整个缓冲区池,来减少恢复期间 DropRelFileNodeBuffers() 的大小,并且在关系足够小或要无效的块数低于完全扫描阈值时,使 DropRelFileNodesAllBuffers() 跳过在恢复期间耗时的整个缓冲区池扫描。
Krunal Bauskar 和 Alexander Korotkov 交换了补丁,以改进 ARM 上的自旋锁实现。
Arne Roland 提交了三个补丁修订版,以确保重命名分区表上的触发器也会重命名分区上的触发器。
Bharath Rupireddy 提交了一个补丁,以修复 pg_workers 关闭的错误消息,使其谈论后台工作进程,而不是适用于其他情况的不存在的连接。
Stephen Frost 提交了另一个补丁修订版,如果需要,将 GSS 信息添加到连接授权日志消息中。
Michael Banck 提交了一个补丁,以阐明 CREATEROLE 角色可以授予默认角色的事实。
Ashutosh Bapat 和 Alexander Korotkov 交换了补丁,以使其易于打印 LSN。
Andreas Karlsson 提交了一个 PoC 补丁,以修复 btree_gist 提供的扩展中丢弃网络掩码信息导致 inet/cidr 支持损坏的问题。
Pavel Stěhule 和 Justin Pryzby 交换了补丁,使其可以从文件中读取 pg_dump 要转储的表。
Justin Pryzby 提交了另一个补丁修订版,以使 CLUSTER ON 成为 pg_dump 中的单独转储对象,为分区表实现 CLUSTER,将 indisclustered 的更改传播到子/父级,使父索引无效,在附加时使父索引集群无效,并在聚集的分区索引的子级上保留 indisclustered。
Simon Riggs 提交了另一个补丁修订版,以向 VACUUM 添加 FAST_FREEZE 选项。
Simon Riggs 提交了一个补丁,以实现惰性 VACUUM 的 one_freeze 然后 max_freeze。
Justin Pryzby 提交了另一个补丁修订版,以使 pg_ls_* 显示目录和共享文件集。
Justin Pryzby 提交了另一个补丁修订版,以删除对 pg_dump 8.1 之前切换行为的引用。
Justin Pryzby 提交了另一个补丁修订版,以允许在分区表上同时 CREATE INDEX CONCURRENTLY,为更多集成添加 SKIPVALID 标志,并使 ReindexPartitions() 设置 indisvalid。
Paul A Jungwirth 提交了两个多范围实现补丁的修订版。
Dean Rasheed 提交了另一个补丁修订版,以改进 OR 子句的估计。
James Coleman 提交了一个补丁,如果收集合并路径没有充分排序,则会报错。
James Coleman 提交了另一个补丁修订版,以确保 generate_useful_gather_paths 不会跳过未排序的子路径,强制执行 generate_useful_gather_paths 中路径键的并行安全性,禁止主动排序中的 SRF,删除不必要的易失性 expr 目标搜索,并在 prepare_sort_from_pathkeys 中记录 find_em_expr_usable_for_sorting_rel。