pgMustard 4 发布,这是一个用于“explain analyze”的用户界面,提供性能提示,已发布。
psycopg2 2.9.0 发布,这是一个用于 PostgreSQL 的 Python 连接器,已发布。
pgAdmin4 5.4 发布,这是一个用于 PostgreSQL 的 Web 和原生 GUI 控制中心,已发布。
PostgreSQL 星球:星球
本周的 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间 (PST8PDT) 周日下午 3:00 前将新闻和公告提交至 david@fetter.org。
Tom Lane 推送了
解决较新版本的 mktime() 的可移植性问题。最近的 glibc 版本在 tm_isdst 与当前时区不一致时会使 mktime() 失败;特别是当区域为 UTC 时,tm_isdst = 1 时会失败。(这似乎与 POSIX 规定的对 struct tm 的其他字段的“不正确”值的处理方式非常不一致,所以如果你问我,这是一个错误,但我敢打赌他们会说这是故意的。)据观察,这会导致在 pg_restore’ing 从不同时区创建的存档时出现表面问题。为了修复此问题,请使用存档中的字段值执行 mktime(),如果失败,请再次尝试 tm_isdst = -1。这将导致结果与原始区域的 UTC 偏移量差异,但这之前也是如此。这不是很关键,因为我们不对结果做任何处理,除了可能打印出来。(总有一天我们应该清除所有这些逻辑,并在存档中记录一个标准格式的时间戳。但这对于向后移植的错误修复来说是不可行的。)此外,通过让 initdb 的 build_time_t() 设置 tm_isdst = -1 而不是 0 来保护我们对 mktime() 的唯一其他使用。这种情况只可能在全年都使用 DST 的区域中出现问题;但我认为确实存在一些,或者将来可能会存在。根据 Wells Oliver 的报告。向后移植到所有支持的版本,因为任何版本都可能需要在较新的 glibc 中运行。讨论: https://postgr.es/m/CAOC+FBWDhDHO7G-i1_n_hjRzCnUeFO+H-Czi1y10mFhRWpBrew@mail.gmail.com https://git.postgresql.org/pg/commitdiff/f807e3410fdfc29ced6590c7c2afa76637e001ad
删除孤立的预期结果文件。这应该在 43e084197 中删除,它删除了相应的规范文件。在摆弄隔离测试器时注意到。https://git.postgresql.org/pg/commitdiff/ffbe9dec13599fa786ea6567df1c6a3f3ee3c673
更新变体预期结果文件。这应该在 d2d8a229b 中更新,但被忽略了。根据添加它的 31a877f18,此文件旨在显示在 default_transaction_isolation = serializable 下获得的结果。我们已经在其他隔离测试中基本上失去了这一目标,但只要我们拥有这个测试,就应该正确。在摆弄隔离测试器时注意到。https://git.postgresql.org/pg/commitdiff/0a1e80c5c4f094087257fc4284a87e0bc7bca591
删除另一个孤立的预期结果文件。aborted-keyrevoke_2.out 在添加时(在提交 0ac5ad513 中)显然需要处理可序列化事务模式的情况。但是,可序列化模式下的输出实际上与常规的 aborted-keyrevoke.out 文件匹配,并且据我所知,这种情况已经持续了很长时间。没有必要继续拖着这个变体。https://git.postgresql.org/pg/commitdiff/f6352a0d4e437ac8bc266f77df22d064592056c9
更新另一个变体预期结果文件。这应该在 533e9c6b0 中更新,但被忽略了。鉴于没有投诉,我不会费心向后移植。https://git.postgresql.org/pg/commitdiff/d3c878499c9d639ff06e0664d06b8c731e30c2fc
改进某些与复制相关的代码中的 SQLSTATE 报告。我最初的目标是在 walrcv_connect() 失败时报告 ERRCODE_CONNECTION_FAILURE,但在我环顾四周后,我意识到编写此代码的人认为错误代码是完全可选的。这不是我对我们项目政策的理解。因此,请确保在每个 ereport 中都提供错误代码,该代码 (a) 是 ERROR 或更高级别的,并且 (b) 并不是内部逻辑错误。同时修复一些非常可疑的现有错误代码分配。虽然这不符合政策,但它在很大程度上也是表面上的,因为这些情况很少会报告给应用程序。所以我认为没有必要向后移植。讨论:https://postgr.es/m/2189704.1623512522@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/6b787d9e32005867ee3660d1ea20f447810a403d
修复 ExecuteQuery 中出现错误后 plancache refcount 泄漏。当将 plancache 中的计划填充到 Portal 中时,不应在 GetCachedPlan 和 PortalDefineQuery 之间冒着抛出错误的风险;如果发生这种情况,GetCachedPlan 递增的计划 refcount 将泄漏。我在 9dbf2b7d7 中重构代码时设法打破了此规则。除了某些内存泄漏外,没有其他可见的后果,而且由于没有人很可能连续多次触发相关的错误条件,因此我们没有注意到这一点也不足为奇。尽管如此,这是一个错误,因此请重新排列操作顺序以消除风险。在寻找更好的错误修复 #17053 时注意到。这个错误相当古老,因此请向后移植到所有支持的分支。https://git.postgresql.org/pg/commitdiff/131ea3e908d3c97a2fe1ab25cce5046dd5cb905f
集中用于保护性复制实用程序语句的逻辑。在“简单查询”代码路径中,对于实用程序语句的解析分析或执行来说,在语句的节点树上涂写是没问题的,因为之后会被丢弃。但是,如果节点树在计划缓存中,那就不好,因为它会损坏后续的执行。到目前为止,我们通过让各个实用程序语句函数在要修改树时应用 copyObject() 来处理这个问题。但这很容易遗漏。Charles Samborski 的错误 #17053 表明 CREATE/ALTER DOMAIN 没有收到此备忘录,并且如果从计划缓存重复执行可能会崩溃。在后向分支中,我们只会为此应用一个狭窄的创可贴,但在 HEAD 中,更谨慎的做法是采用更原则性的修复方法,以消除将来出现其他类似错误的可能性。因此,让我们将执行 copyObject 的责任从其子级提升到 ProcessUtility 中,从而确保它发生在所有实用程序语句类型中。同时,修改 ProcessUtility 的 API,以便其调用者可以告诉它是否需要复制步骤。事实证明,在所有情况下,直接调用者都知道节点树是否是临时的,因此这不会涉及大量的代码改动。这样,虽然由于有时会复制无论如何都不会变异的节点树而在从缓存执行的代码路径中损失了一点,但我们在简单查询代码路径中通过不复制临时的节点树而获得了一些好处。复杂到复制成本很高的语句几乎肯定是无论如何都必须复制的语句,因此缓存代码路径中的损失不应该很大。(请注意,整个问题仅适用于实用程序语句。可优化的语句没有这个问题,因为我们很久以前就使执行器将计划树视为只读。也许有一天我们会使实用程序语句执行也这样做,但我不会抱太大希望。)讨论:https://postgr.es/m/931771.1623893989@sss.pgh.pa.us 讨论:https://postgr.es/m/17053-3ca3f501bbc212b4@postgresql.org https://git.postgresql.org/pg/commitdiff/7c337b6b527b7052e6a751f966d5734c56f668b5
改进 pgbench 中的版本报告。提交 547f04e73 导致 pgbench 开始打印其版本号,这似乎是个好主意,但还需要做更多工作:* 如果服务器版本不同,也打印服务器版本号。* 打印 PG_VERSION 字符串,而不是一些重建的近似值。此补丁复制了 psql 用于相同目的的经过良好测试的代码。讨论:https://postgr.es/m/1226654.1624036821@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/84bee9610965331d5110971d8de390a5bbe2effc
修复具有重复 polroles 条目的 DROP OWNED BY 的错误行为。通常,pg_policy.polroles 数组不会多次列出相同的角色;但 CREATE POLICY 不会阻止这种情况。如果我们对一个多次列出的角色执行 DROP OWNED BY,RemoveRoleFromObjectPolicy 会遭受断言失败或遇到自更新元组错误。重写它以正确处理重复条目,并添加 CommandCounterIncrement 调用以防止另一个问题。根据讨论,这里应该进行其他清理,但这似乎是最低限度的基本修复。根据来自 Alexander Lakhin 的错误 #17062。它一直被破坏,因此请向后移植到所有支持的分支。讨论:https://postgr.es/m/17062-11f471ae3199ca23@postgresql.org https://git.postgresql.org/pg/commitdiff/d21fca084356946664bfce19d66d2df2bb873cbd
为 v14 中添加的 libpq 功能提供功能测试宏。我们收到一个请求,要求提供一种在编译时测试新管道功能可用性的方法。更一般地说,通过 #ifdef 测试所有新的 libpq API 功能似乎是个好主意。人们一直在为此使用 pg_config.h 中的版本;但这更可能表示服务器版本,而不是 libpq 版本,在它们不同的越来越常见的情况下。如果 libpq-fe.h 本身是关于它提供哪些功能的真实来源,则更安全。因此,建立一项政策,即从 v14 开始,当我们在那里添加新的 API 时,我们将向 libpq-fe.h 添加一个适当的功能存在宏。(追溯应用此政策似乎没有多大意义,但对于 v14 来说还为时不晚。)Tom Lane 和 Alvaro Herrera,根据 Boris Kolpackov 的建议。讨论:https://postgr.es/m/boris.20210617102439@codesynthesis.com https://git.postgresql.org/pg/commitdiff/6991e774e0304f5ef488cf1ae4fa79578b6ae3d5
由提交 f61db909d 添加的稳定测试用例。Buildfarm 的成员 ayu 和 tern 有时会为此查询显示与预期不同的计划。我之前无法重现这种情况,但今天我终于意识到发生了什么。如果存在并发打开的事务(可能是 buildfarm 中的自动清理运行,但也可能是手动安排的),那么几行之前的 DELETE 删除的行的索引条目不会立即被清除,导致规划器对 ft2.c1 的极值估计发生变化,这足以使“c1 > 1100”的行数估计发生变化,从而将连接计划从嵌套循环更改为哈希。为了解决这个问题,将查询条件更改为“c1 > 1000”,使得无论是否存在并发打开的事务,哈希计划都是首选。由于此 UPDATE 被定制为无操作,因此其他任何内容都不会改变。报告:https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=ayu&dt=2021-06-09%2022%3A45%3A48 报告:https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=ayu&dt=2021-06-13%2022%3A38%3A18 报告:https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=tern&dt=2021-06-20%2004%3A55%3A36 https://git.postgresql.org/pg/commitdiff/5843659d091bfb6f2c60e010ea1fd00e55ee6ada
Michaël Paquier 推送
删除 VACUUM FULL/CLUSTER 中强制的 TOAST 重压缩。在 bbe0a81 中引入的 TOAST 数据重压缩所增加的额外检查,被证明即使在不进行重压缩的情况下也会对 VACUUM 或 CLUSTER 产生性能影响。对于包含非 NULL 值的更多可 TOAST 列,这一点更为明显。可以进行改进,以降低这些额外检查的开销,但这对于现阶段的 14 来说不是重点,我们也不确定 VACUUM FULL/CLUSTER 的代码路径是否适合此项工作。与包括 Andres Freund、Robert Haas、Álvaro Herrera、Tom Lane 和我自己等几个人讨论。讨论:https://postgr.es/m/20210527003144.xxqppojoiwurc2iz@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/dbab0c07e5ba1f19a991da2d72972a8fe9a41bda
改进 pg_event_trigger_ddl_commands() 中对已删除对象的处理。在深入研究 pg_event_trigger_ddl_commands() 返回的对象列表时,发现某个对象被删除可能会导致缓存查找错误,因为如果对象丢失,则获取对象地址和类型名称的调用将会失败。当 ALTER TABLE 子命令涉及标识列时,可能会看到这些查找错误。此代码路径中的查找逻辑已更改,以获得类似于任何其他可 SQL 调用的函数的行为,即忽略未找到的对象,从而利用 2a10fdc。由于它们需要此提交,因此未更改后向分支,这对于稳定分支来说过于侵入性。在此基础上,添加测试用例以使用标识列来执行事件触发器,并针对关系的事件 ddl_command_end 来强调更多情况。作者:Sven Klemm、Aleksander Alekseev、Michael Paquier 讨论:https://postgr.es/m/CAMCrgp2R1cEXU53iYKtW6yVEp2_yKUz+z=3-CTrYpPP+xryRtg@mail.gmail.com https://git.postgresql.org/pg/commitdiff/2d689babe3cb50dcb29f6ed595a61d56e518c0d8
文档:将标记 <productname> 更一致地应用于 OpenSSL。作者:Daniel Gustafsson 讨论:https://postgr.es/m/CE12DD5C-4BB3-4166-BC9A-39779568734C@yesql.se https://git.postgresql.org/pg/commitdiff/f80979f659d39e238e95444e6752142799428078
Bruce Momjian 推送
文档:添加关于数组函数引用的 PG 14 发行说明项。引用某些内置数组函数的用户定义对象需要在 PG 14 中重新创建。报告者:Justin Pryzby 讨论:https://postgr.es/m/20210608225618.GR16435@telsasoft.com https://git.postgresql.org/pg/commitdiff/25dfb5a831a1b8a83a8a68453b4bbe38a5ef737e
文档:PG 14 发行说明更新。报告者:Justin Pryzby 讨论:https://postgr.es/m/20210612034551.GU16435@telsasoft.com https://git.postgresql.org/pg/commitdiff/a2559d4093725592a3fd5da8a4c7ac7c883115a0
文档:PG 14 发行说明修复。与逻辑复制属性和 BRIN 索引相关的项。报告者:Tomas Vondra、John Naylor 讨论:https://postgr.es/m/0db66294-a668-2caa-2b5e-a8db60b30662@enterprisedb.com, CAFBsxsH21KnteYdk33F1oZu2O726NSD6_XBq51Tn0jytsA1AnA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/86b222b09071d3918c5c55b164d22b2236d3f872
Álvaro Herrera 推送
修复 1632ea43682f 中的逻辑错误。我忽略了一个条件在逻辑上是反转的。为了使代码更易于阅读,此修复比仅仅否定条件要复杂一些。同时修复同一提交留下的一些过时的注释。作者:Masahiko Sawada sawada.mshk@gmail.com 作者:Álvaro Herrera alvherre@alvh.no-ip.org 审阅者:Amit Kapila amit.kapila16@gmail.com 讨论:https://postgr.es/m/YMRlmB3/lZw8YBH+@paquier.xyz https://git.postgresql.org/pg/commitdiff/33c509956704e1d918077b51ccd954f2e201a8f5
为过时具有活动 walsender 的槽添加测试用例。在本次提交之前,用于在保留的 WAL 大小增长过大时通知正在运行的 walsender 的代码是完全未覆盖的;这为此情况添加了覆盖范围。此测试涉及向 walsender 和 walreceiver 发送 SIGSTOP,并在推进 WAL 时运行检查点,然后发送 SIGCONT。Perl 测试中没有对此编码的先例,而且我对相关手册页的解读表明它很可能在 Windows 上失败。因此,此测试始终在该平台上跳过。作者:Álvaro Herrera alvherre@alvh.no-ip.org 讨论:https://postgr.es/m/202106102202.mjw4huiix7lo@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/09126984a2631db8dd6299f23954e0dede69735f
还原“为过时具有活动 walsender 的槽添加测试用例”。这将还原提交 09126984a263;那里添加的测试用例在情况仍然神秘的情况下失败了一次。现在最好删除测试,以便 14beta2 中不会内置随机故障。https://git.postgresql.org/pg/commitdiff/96795176810b979a2bf1f4563bdcb161679d5b95
Noah Misch 推送
编辑 pg_terminate_backend() “timeout”参数的文本。将 pg_description 条目还原为其 v13 形式,因为这些消息通常保持较短,并且不讨论各个参数。不增加 catversion,因为 pg_description 内容不会损害后端兼容性或应用程序兼容性。Justin Pryzby 讨论:https://postgr.es/m/20210612182743.GY16435@telsasoft.com https://git.postgresql.org/pg/commitdiff/0aac73e6a2602696d23aa7a9686204965f9093dc
删除 pg_wait_for_backend_termination()。它无法等待已离开 procarray 的后端。能够容忍该限制的用户可以轮询 pg_stat_activity。其他用户可以使用 pg_terminate_backend() 的“timeout”参数。审阅者:Bharath Rupireddy。讨论:https://postgr.es/m/20210605013236.GA208701@rfd.leadboat.com https://git.postgresql.org/pg/commitdiff/5f1df62a459b51ab3bb625a0ee5e655429254257
Amit Kapila 推送
修复推测中止的解码。在推测性插入的解码期间,我们依赖于确认记录或下一个更改记录来清除 TOAST 哈希。但这可能会导致多个问题:(a) 如果事务中的推测性插入在 TOAST 插入之后既没有确认记录,也没有任何其他记录,则会导致内存泄漏;(b) 如果下一个操作不是在同一表上的插入/更新,则会导致错误和断言失败。此修复方法是开始将 spec abort 更改排队,并在处理过程中清除 TOAST 哈希和更改记录。目前,我们正在为 TOAST 和主表排队 spec abort,即使我们在处理主表的 spec abort 记录时执行清理。稍后,如果我们有一种方法来区分 TOAST 和主表的 spec abort 记录,我们可以避免为 TOAST 表的 spec abort 排队更改。报告者:Ashutosh Bapat 作者:Dilip Kumar 审阅者:Amit Kapila 向后移植:9.6,其中引入了它 讨论:https://postgr.es/m/CAExHW5sPKF-Oovx_qZe4p5oM6Dvof7_P+XgsNAViug15Fm99jA@mail.gmail.com https://git.postgresql.org/pg/commitdiff/4daa140a2f50e9a160bc180c3997ee13c7aabf9e
记录同步逻辑复制中的一些注意事项。在同步逻辑设置中,锁定 [用户] 目录表可能会导致死锁。这是因为事务的逻辑解码可以锁定目录表以访问它们,因此在事务中独占锁定这些表可能会导致死锁。为了避免这种情况,用户必须避免对目录表进行独占锁定。作者:Takamichi Osumi 审阅者:Vignesh C、Amit Kapila 向后移植:9.6 讨论:https://postgresql.ac.cn/message-id/20210222222847.tpnb6eg3yiykzpky%40alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/3cb828dbe26087e7754f49f3cfe3ed036d5af439
在 RelationGetIdentityKeyBitmap 中处理无副本标识索引的情况。提交 e7eea52b2d 引入了一个新函数 RelationGetIdentityKeyBitmap,该函数忽略了在关系上没有副本标识索引的情况。作者:Mark Dilger 审阅者:Takamichi Osumi、Amit Kapila 讨论:https://postgresql.ac.cn/message-id/4C99A862-69C8-431F-960A-81B1151F1B89@enterprisedb.com https://git.postgresql.org/pg/commitdiff/2731ce1bd550d08f3fdd7bcb1497af4b95170976
Alexander Korotkov 推送
支持 unnest(multirange) 并将 multirange 强制转换为范围数组。人们发现 multirange 缺乏将其分解为单个范围的能力。订阅和正确的扩展对象表示需要大量工作,并且对于 v14 来说为时已晚。此提交提供了 unnest(multirange) 的实现,并将 multirange 强制转换为范围数组,这非常简单。unnest(multirange) 被定义为多态过程。由于我们这里没有任何 anyrangearray 多态类型可使用,因此每个 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 https://git.postgresql.org/pg/commitdiff/29854ee8d1ca4a46adb7e84deb17e6fb18e531cc
在文档章节标题中添加缺少的类型名称“multirange”。讨论:https://postgr.es/m/CAFj8pRDioOxiJgmgw9TqQqZ3CxnJC4P5B2Oospf2eMgAjJuewA%40mail.gmail.com 作者:Pavel Stehule、Alexander Korotkov 审阅者:Justin Pryzby、Tom Lane https://git.postgresql.org/pg/commitdiff/ad2da246c69dd5ec55764d4b6066f3b0c0d24ca2
由于 buildfarm 故障,还原 29854ee8d1。报告者:Tom Lane 讨论:https://postgr.es/m/CAPpHfdvcnw3x7jdV3r52p4%3D5S4WUxBCzcQKB3JukQHoicv1LSQ%40mail.gmail.com https://git.postgresql.org/pg/commitdiff/817bb0a7d1e02df4643d37304aed8574cf43f629
Peter Geoghegan 推送
从 VACUUM 状态中删除不需要的字段。错误修复提交 5fc89376 有效地使 vacuumlazy.c 全局状态结构中的 lock_waiter_detected 字段成为 lazy_truncate_heap() 拥有的私有状态。通过使用局部变量替换结构字段来完成此操作。https://git.postgresql.org/pg/commitdiff/958cfbcf2dd338e3179c2d8a35f48bde020eba60
支持禁用 VACUUM 的索引绕过功能。通用化 INDEX_CLEANUP VACUUM 参数(以及相应的 reloption):使其成为一个三值布尔参数。现在它公开了第三个选项 “auto”。 “auto” 选项(现在是默认选项)启用了提交 1e55e7d1 添加的“绕过索引清理”优化。“VACUUM (INDEX_CLEANUP TRUE)” 被重新定义为再次使 VACUUM 简单地执行任何需要的索引清理,而不管在目标堆关系的第一遍扫描中遇到了多少死元组(除非死元组数量恰好为零)。这为用户提供了一种选择退出“绕过索引清理”优化的方法,如果出于任何原因证明有必要的话。它也被 PostgreSQL 开发人员预期会不时地用作测试选项。“VACUUM (INDEX_CLEANUP FALSE)” 的作用与以前相同:它强制禁用索引清理和索引清除。预计在 PostgreSQL 中不会经常使用。
Andrew Dunstan 推送
进一步完善 stuck_on_old_timeline 恢复测试。 TestLib::perl2host 可以接受文件参数以及目录参数,从而使代码变得更加简单。此外,添加有关为什么使用正斜杠以及为什么设置 PERL_BADLANG=0 的注释。讨论:https://postgr.es/m/e9947bcd-20ee-027c-f0fe-01f736b7e345@dunslane.net https://git.postgresql.org/pg/commitdiff/54a5ed22016940d7ad5060ed62d23473924756a1
除了普通表之外,不要为任何其他对象设置快速默认值。 Release 11 中添加的快速默认代码遗漏了检查要添加快速默认值的表是否是普通表。因此,可以将其添加到外表中,这会造成可预见的崩溃。这里我们执行此检查。此外,在回溯分支上,由于其中一些可能已经传播到野外,如果我们遇到一个非普通表的属性缺少值,我们就会忽略它。修复了错误 #17056。回溯到 Release 11,由 Andres Freund、Álvaro Herrera 和 Tom Lane 审核 https://git.postgresql.org/pg/commitdiff/0a4efdc7ebf2584257b166c87e82797eb92815b5
Heikki Linnakangas 推送
修复了关于 WAL 文件查找位置的过时注释。自从提交 c24dcd0cfd 以来,我们一直在使用 pg_pread() 来读取 WAL 文件,这不会改变查找位置(除非我们回退到 src/port/pread.c 中的实现)。相应地更新注释。回溯到:12,我们开始使用 pg_pread() 的版本 https://git.postgresql.org/pg/commitdiff/d0303bc8d2670d11c9df9220aa08a2c33529e100
整理 GetMultiXactIdMembers()
的错误行为。其中一个错误路径使 *members
未初始化。这不是一个实际的错误,因为大多数调用者在函数返回 -1 时不会查看 *members
,但是让我们保持整洁。一个调用者 heap_lock_tuple() 会执行“if (members != NULL) pfree(members)”,但 AFAICS 它永远不会传递无效的“multi”值,因此它不应该到达该错误情况。调用者在他们的期望中也有些不一致。如果“members”不是 NULL,heap_lock_tuple() 会 pfree 'members' 数组,如果“nmembers >= 0”,其他调用者会 pfree() 它,如果“nmembers > 0”,其他调用者会 pfree() 它。这也不是一个实际的错误,因为该函数永远不应返回 0,但是为此添加一个断言以使其更清晰。我保留了调用者。我还移动了设置 *nmembers
的行。它之前并没有错,但我喜欢在 'return' 语句旁边执行此操作,以明确表示它始终在返回时设置。此外,删除 ereport(ERROR) 之后的 1 个无法到达的 return 语句,以简洁起见,并与紧随其后的类似 if 代码块保持一致。作者:Greg Nancarrow,并由我进行了其他更改。回溯到:9.6,所有受支持的版本 https://git.postgresql.org/pg/commitdiff/d24c5658a80c8f5037e9e1948de311d3f3350f12
Tomáš Vondra 推送
藤井正雄 推送
Amit Khandekar 发送了一个正在开发的补丁,以允许在工作进程中使用子事务。
Bertrand Drouvot 发送了另一个允许在备用服务器上进行逻辑解码的补丁修订版。
Thomas Munro 发送了另一个补丁修订版,以对仅索引扫描使用元组级 SIREAD 锁,并在可能的情况下跳过 btree 页面上的 SIREAD 锁。
Andrew Dunstan 发送了另一个补丁修订版,旨在修复在更改带有默认值的外表列的类型时表现为分段错误的错误。
Tomáš Vondra 发送了另一个补丁修订版,以使用扩展统计信息来改进连接估计。
Bharath Rupireddy 发送了另一个补丁修订版,以删除 pg_wait_for_backend_termination()。
Fabien COELHO 发送了另一个补丁修订版,以将 psql 中的 echo 系统整合到它自己的函数中。
Yugo Nagata 和 Fabien COELHO 交换了 pgbench 的补丁,以确保仅在请求时才计算和存储 conn_duration。
Jehan-Guillaume de Rorthais 发送了一个 PoC 补丁,当 log_statement_stats=on 时,将等待事件跟踪到日志文件。
Yugo Nagata 和 Fabien COELHO 交换了补丁,以避免由于跳过的事务而导致 pbgench 中出现卡住的情况。
Jacob Champion 和 Daniel Gustafsson 交换了补丁,以支持 NSS 作为 libpq TLS 后端。
Dilip Kumar 和 Amit Langote 交换了补丁,旨在修复表现为使用 toast 泄漏内存的推测性插入解码的错误。
Yugo Nagata 和 Fabien COELHO 交换了补丁,旨在修复 pgbench 中表现为负“初始连接时间”的错误。
大隅隆道和 Amit Kapila 交换了补丁,以修复锁定 [用户] 目录表、2PC 和逻辑复制之间的不协调。
Justin Pryzby 和 Michaël Paquier 交换了补丁,以添加更多用于 WAL 压缩的选项。
Ranier Vilela 发送了另一个补丁修订版,以使对 ProcArray 的访问更加高效。
David Fetter 发送了一个补丁,以便在回归测试中在适当的地方使用单数形式。
Alexander Pyhalov 发送了另一个补丁修订版,以实现 case 表达式下推。
Ranier Vilela 发送了一个补丁,以修复 ecpg 中未以 null 结尾的缓冲区。
Fabien COELHO 和 Yugo Nagata 交换了补丁,旨在修复表现为 pgbench 日志记录中出现错误的错误。
Dmitry Dolgov 发送了两个 ArrayExpr 中防止每个元素被打乱的补丁修订版。
Dilip Kumar 发送了一个补丁,以使 CREATE DATABASE 完全 WAL 日志记录,因此不再强制执行该命令进行检查点操作。
Ajin Cherian 发送了另一个补丁修订版,以添加一个选项,用于在 CREATE_REPLICATION_SLOT 命令中设置两阶段,并支持 pg_recvlogical 中的两阶段解码。
Peter Smith 和 Ajin Cherian 交换了补丁,以支持两阶段事务的逻辑解码。
Daniel Gustafsson 发送了一个补丁,以便在文档中使用更正确和当前的 TLS/SSL 而不是 SSL。
Thomas Munro 发送了另一个补丁修订版,以跟踪共享内存中的关系大小,为 smgrnblocks() 提供无锁快速路径,并将 fifo 更新为 lru 以清除有效的缓存。
Kyotaro HORIGUCHI 发送了另一个补丁修订版,以在 pg_waldump 中的错误中显示更多详细信息。
Tom Lane 发送了一个补丁,以允许在隔离测试器脚本中使用常规标识符。
Matthias van de Meent 发送了另一个补丁修订版,以修复 GetOldestNonRemovableTransactionId 中的一个错误,该错误返回的值与 GlobalVisTestFor(rel) 不一致。此外,lazy_scan_prune 有一个错误的假设,即 GlobalVis*Rels 的 OldestXmin 永远不会 < vacrel->OldestXmin,这是不正确的。现在已经修复了此假设,并且已经记录了这些更改。
Heikki Linnakangas 发送了一个补丁来拆分 xlog.c,因为它变得难以控制。
Thomas Munro 发送了另一个补丁修订版,以制作和使用 qsort 模板。
Amit Langote 发送了另外三个补丁修订版,以使用常量分区键跳过分区元组路由。
Jeff Davis 发送了两个补丁修订版,以阐明复制协议的文档。
Tomáš Vondra 发送了一个 PoC 补丁,以使用 count-min 草图进行连接基数估计。
Jeff Davis 发送了另一个补丁修订版,以记录 START REPLICATION 中发生的情况。
Alexander Korotkov 发送了另外三个补丁修订版,以实现多范围的 UNNEST。
Vigneshwaran C 发送了另一个补丁修订版,以添加对 PUBLICATION 的架构级别支持。
Amul Sul 发送了另一个补丁修订版,以实现 ALTER SYSTEM SET READ {WRITE | ONLY}。
Nitin Jadhav 发送了另一个补丁修订版,以实现启动进程进度指示器。
Matthias van de Meent 发送了另一个补丁修订版,以实现和使用索引元组属性迭代,并为 _bt_binsrch*
实现页面级动态前缀截断。
Mark Dilger 提交了两个补丁修订版,用于选择性地在错误时禁用订阅。
Jeff Davis 提交了一个补丁,用于修复启动复制识别系统的问题。
Thomas Munro 提交了另一个补丁修订版,使用定时器实现 snapshot_too_old。
Takashi Menjo 提交了另一个补丁修订版,将 PMEM 上的 WAL 段文件映射为 WAL 缓冲区。
Amit Kapila 提交了另一个补丁修订版,用于实现逻辑复制的行过滤。
Egor Rogov 提交了一个补丁,将范围类型的统计信息包含在 pg_stats 视图中。
Álvaro Herrera 提交了另外两个补丁修订版,为使用活动 walsender 使插槽过时添加了一个测试用例。
Greg Sabino Mullane 提交了另一个补丁修订版,以避免不必要地计算页面校验和。
Noah Misch 提交了一个补丁,以移除 XLogFileInit() 跳过 ControlFileLock 的能力。
David Rowley 提交了另一个补丁修订版,添加了一种具有稳定指针的新哈希表类型。
Thomas Munro 提交了一个补丁,用于调整 LLVM 13 API 的更改。