PostgreSQL 14 发布候选版 1 已发布。测试!
JDBC 42.2.24 发布 https://jdbc.postgresql.ac.cn/documentation/changelog.html#version_42.2.24
check_pgbackrest 2.1 发布,这是一个与 Nagios 兼容的 pgBackRest 监控器。https://github.com/dalibo/check_pgbackrest/releases
sqlite_fdw 2.1.0 发布。
https://archives.postgresql.org/pgsql-jobs/2021-09/
Planet PostgreSQL:https://planet.postgresql.org/
本周的 PostgreSQL 每周新闻由 David Fetter 为您带来
请在太平洋标准时间(PST8PDT)周日下午 3:00 前将新闻和公告提交至 david@fetter.org。
Tomáš Vondra 推送了
不允许在系统列上使用扩展统计信息。自从引入扩展统计信息以来,我们已禁止引用系统列。因此,例如,CREATE STATISTICS s ON ctid FROM t; 会失败。但是,通过对表达式使用扩展统计信息,可以很容易地绕过此限制 CREATE STATISTICS s ON (ctid::text) FROM t; 这是 a4d75c86bf 中的一个疏忽,通过添加一个简单的检查来修复。回溯到引入对表达式的扩展统计信息支持的 PostgreSQL 14。回溯通过:14 讨论:https://postgr.es/m/20210816013255.GS10479%40telsasoft.com https://git.postgresql.org/pg/commitdiff/c9eeef2a15c02ff7dd2bf3251dbee925b050fc0f
构建每个统计信息对象后释放内存。到目前为止,给定关系的所有扩展统计信息都在相同的内存上下文中构建,而没有重置。一些内存被显式释放,但并非所有内存都被释放 - 例如,在去活化值时分配的内存很难释放。自 PostgreSQL 10 中引入扩展统计信息以来,它一直这样工作,但是添加对表达式的扩展统计信息支持使问题变得更糟,因为它增加了要构建的统计信息数量。通过添加一个在构建每个统计信息对象后重置的内存上下文来修复。(包括其中的所有统计信息类型)。在构建每种统计信息类型后重置它会更好,但它需要更多侵入性更改和结果复制,从而使其更难回溯。回溯到引入扩展统计信息的 PostgreSQL 10。作者:Justin Pryzby 报告者:Justin Pryzby 审查者:Tomas Vondra 回溯通过:10 讨论:https://postgresql.ac.cn/message-id/20210915200928.GP831%40telsasoft.com https://git.postgresql.org/pg/commitdiff/83772cc78e0392a247231ba510c61b6612b93b3f
释放由 dependency_degree 分配的内存。计算函数依赖的程度可能会分配大量内存 - 我们已经释放了大部分显式分配的内存,但例如,未去活化的 varlena 值被遗留下来。这可能是一个问题,因为我们考虑了很多依赖项(所有组合),并且可能会再次为每个依赖项发生去活化。通过在专用上下文中调用 dependency_degree() 并在每次调用后重置它来修复。我们只需要计算的依赖程度,因此我们不需要复制任何内容。回溯到引入扩展统计信息的 PostgreSQL 10。回溯通过:10 讨论:https://postgresql.ac.cn/message-id/20210915200928.GP831%40telsasoft.com https://git.postgresql.org/pg/commitdiff/ad8a166ca86846ab691bd6dafc695e0f7dd96012
Tom Lane 推送了
文档:对“格式化”部分进行小的改进。在源树中添加更具体的链接。https://git.postgresql.org/pg/commitdiff/5577cd571ad3528471152f68636ac03c80576977
修复 plpgsql 中 CALL 内 STABLE 参数的错误评估。在提交 84f5c2908 之前,plpgsql CALL 语句的参数列表中的 STABLE 函数将看到最新的快照,因为 exec_stmt_call 会推送一个新快照。我摆脱了这一点,因为快照在 COMMIT 中消失的可能性使得跨 CALL 语句管理快照过于困难。就过程本身而言,这很好,但我忘记考虑 CALL 参数列表中 STABLE 函数的可能性。正如现在的情况一样,这些函数将使用 Portal 的快照作为 ActiveSnapshot 执行,从而使它们无法看到比 Portal 启动更新的更新。(VOLATILE 函数没有问题,因为它们会拍摄自己的快照;这确实也是为什么过程本身没有问题的原因。没有 STABLE 过程。)我们可以通过在 ExecuteCallStmt 本身内临时推送一个新快照来修复此问题。在我们进入适当的过程之前弹出快照消除了管理问题。可能无用的额外快照抓取有点烦人,但它并不比 84f5c2908 之前的情况更糟。根据 Alexander Nawratil 的错误 #17199。回溯到 v11,就像之前的补丁一样。讨论:https://postgr.es/m/17199-1ab2561f0d94af92@postgresql.org https://git.postgresql.org/pg/commitdiff/4476bcb8773b306b9ca84bf2fadcf30acfa2c687
文档:扩展有关 postgres_fdw 中排序规则不匹配风险的警告。更明确地说明远程排序规则与本地排序规则不匹配的风险。实际修复这些风险似乎很难,我放弃了可能可以回溯的想法。因此,对于回溯分支,我们能做的最好的事情就是添加文档。根据 Jiří Fejfar 的错误 #16583 的讨论。讨论:https://postgr.es/m/2438715.1632510693@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/7b0be9fb2dddb214db2bed0e137b9b42c1479455
避免 interval_cmp_value() 中不必要的除法。当我们要重新组合这些值时,将时间字段拆分为天和微秒几乎没有用处。目前尚不清楚是否有人会在实际情况下注意到加速,但节省的周期就是获得的周期。讨论:https://postgr.es/m/2629129.1632675713@sss.pgh.pa.us https://git.postgresql.org/pg/commitdiff/e94c1a55dada49772622d2be2d17a2a9973b2661
Álvaro Herrera 推送了
文档:为“辅助进程”添加术语表条目。为未记录的现有进程也添加条目,并调整现有定义以保持一致性。根据 Bharath Rupireddy 的问题。作者:Justin Pryzby pryzby@telsasoft.com 作者:Alvaro Herrera alvherre@alvh.no-ip.org 讨论:https://postgr.es/m/CALj2ACVpYCT0M+k8zqrAa4ZQZV+ce5s6G=yajwoS1m=h-jj8NQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/d3014fff4cd4dcaf4b2764d96ad038f3be7413b0
更好地记录 XLOG_INCLUDE_XID。我注意到提交 0bead9af484c 在 XLogSetRecordFlags 中没有记录此标志,这让我发现该标志实际上并没有执行其注释所说的操作。通过添加更多注释来改进情况。回溯到 14,其中出现上述提交。作者:Álvaro Herrera alvherre@alvh.no-ip.org 讨论:https://postgr.es/m/202109212119.c3nhfp64t2ql@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/ade24dab97a20dae74fb57c0106dfe0e0303541b
Andres Freund 推送了
pgstat:从 AtEO[Sub]Xact_PgStat() 等中分离出关系统计信息处理。即将到来的补丁将向这些函数添加额外的工作。为了避免函数变得过于复杂/一次做太多事情,将子任务拆分为它们自己的函数。作者:Andres Freund andres@anarazel.de 讨论:https://postgr.es/m/20210405092914.mmxqe7j56lsjfsej@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/e1f958d759ff71a264973d13e9bc86c7db822928
pgstat:准备将截断关系的机制也用于删除关系。即将推出的共享内存统计信息补丁以事务方式删除已删除对象的统计信息,而不是稍后作为 vacuum 的一部分删除它们。这意味着事务内部 DROP 的统计信息需要处理类似 TRUNCATE 的中止(子)事务:应该恢复直到 DROP 的统计信息。重命名现有基础设施以进行准备。作者:Andres Freund andres@anarazel.de 讨论:https://postgr.es/m/20210405092914.mmxqe7j56lsjfsej@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/6b9501660c9384476ca9a04918f5cf94379e419e
Peter Geoghegan 推送了
删除过度热心的索引删除断言。即使偏移量指向页面行指针数组的末尾,损坏的 HOT 链也不是意外情况。heap_prune_chain() 没有(而且从来没有)将这种情况视为意外情况,因此 heap_index_delete_tuples() 中的派生代码也不应该这样做。提交 4228817449 中的疏忽。断言可能只会失败在 Postgres 14 和主版本上。早期版本没有提交 3c3b8a4b,该提交教导 VACUUM 截断堆页的行指针数组。为了保持一致性,仍然回溯所有版本。作者:Peter Geoghegan pg@bowt.ie 报告者:Alexander Lakhin exclusion@gmail.com 讨论:https://postgr.es/m/17197-9438f31f46705182@postgresql.org 回溯:12-,就像提交 4228817449 一样。https://git.postgresql.org/pg/commitdiff/5e6716cde5749aea506dd3f30b099b6e9b4c5af8
修复“单值策略”索引删除问题。当由自底向上的索引删除过程触发时,对去重应用单值策略是不合适的。这会浪费循环,因为稍后的自底向上删除过程会过度解释去重实际上“按设计”跳过的较旧的重复元组。它还会使自底向上删除对于恰好跨越无意义的“每个叶子页面的索引具有单个键值”阈值的低基数索引效果大大降低。为了修复此问题,稍微缩小了考虑去重单值策略的条件。我们已经避免了唯一索引的策略,因为我们的高层目标必须只是为 VACUUM 运行争取时间(而不是节省空间)。现在,当我们的自底向上过程报告失败时,我们也会避免它。这两种情况具有相同的高层目标,并且已经显著重叠,因此这种方法非常自然。提交 d168b666 中的疏忽,该提交添加了自底向上的索引删除。作者:Peter Geoghegan pg@bowt.ie 讨论:https://postgr.es/m/CAH2-WznaOvM+Gyj-JQ0X=JxoMDxctDTYjiEuETdAGbF5EUc3MA@mail.gmail.com 回溯:14-,其中引入了自底向上删除。https://git.postgresql.org/pg/commitdiff/dd94c2852e6e3a246b9fd64bf2d9c7fc01020905
记录 heapam 行指针截断的问题。在提交 3c3b8a4b 之前,检查偏移量编号是否超出堆页的行指针数组末尾只是 HOT 链遍历代码的防御性健全性检查。但现在这是严格必要的。在 heapam 中添加注释,引用需要正确处理它的代码。根据 Alexander Lakhin 的建议。讨论:https://postgr.es/m/f76a292c-9170-1aef-91a0-59d9443b99a3@gmail.com https://git.postgresql.org/pg/commitdiff/c7aeb775df895db240dcd6f47242f7e08899adfb
nbtree README:添加有关 latestRemovedXid 的注释。指出索引元组删除通常需要删除操作的 WAL 记录的 latestRemovedXid 值。现在,由于它在原始执行期间提前发生,这肯定是整个删除操作中最昂贵的部分。这可以说是在提交 558a9165e08 中的一个疏忽,该提交将生成这些值所需的工作从索引删除 REDO 例程移动到索引删除操作的原始执行。https://git.postgresql.org/pg/commitdiff/48064a8d330db259076fb7b2300544fbf65f4109
vacuumlazy.c:删除过时的 'onecall' 注释。删除对 lazy_vacuum() 的 onecall 参数的过时引用。该函数参数已由提交 3499df0dee 删除。另外删除介绍环绕保护概念的相邻注释块。在这里讨论保护机制不再有意义,因为 lazy_vacuum()(和相关函数)不再是唯一可能触发保护机制的地方。自提交 c242baa4a8 教导 VACUUM 在其初始堆扫描期间考虑触发保护机制以来,情况一直是如此。https://git.postgresql.org/pg/commitdiff/c1a47dfe2e9f814e61377f47aa79a113a4c73a63
更新过时的 nbtree 删除注释。_bt_delitems_delete
() 不再是由设置了 LP_DEAD 位的索引元组驱动的索引元组删除所使用的高级入口点(现在称为“简单索引元组删除”)。它在提交 d168b66682 后成为仅由 _bt_delitems_delete_check
() 调用的较低级例程。https://git.postgresql.org/pg/commitdiff/ce2a86053380f7e82dc8318ac48a22a7ab266398
Michaël Paquier 推送了
引入 GUC shared_memory_size_in_huge_pages。这个运行时计算的 GUC 显示服务器的主共享内存区域所需的巨页数量,利用了 0c39c29 和 0bd305e 中所做的工作。这对于用户估计服务器所需的巨页数量非常有用,因为它可以在不必启动服务器并可能分配一大块共享内存的情况下进行估计。巨页的数量是根据现有 GUC huge_page_size(如果已设置)或通过在 Linux 上查看 /proc/meminfo 来使用系统默认值计算的。这里没有任何新内容,因为此提交重用了现有的计算方法,只是将此信息直接公开给用户。重构了计算巨页大小的例程,以限制具有平台特定标志的文件数量。这个新 GUC 的名称是基于讨论所做的最受欢迎的选择。这仅在 Linux 上受支持。我已经花时间在 Linux、Windows 和 MacOS 上测试了更改,尽管最后两个不支持大页面。第一个根据现有 GUC huge_page_size 或系统默认值正确计算页数。感谢 Andres Freund、Robert Haas、Kyotaro Horiguchi、Tom Lane、Justin Pryzby(以及此处忘记的任何人)的讨论。作者:Nathan Bossart 讨论:https://postgr.es/m/F2772387-CE0F-46BF-B5F1-CC55516EB885@amazon.com https://git.postgresql.org/pg/commitdiff/43c1c4f65eab77bcfc4f535a7e9ac0421e0cf2a5
修复 TestLib.pm 中需要适应 Msys perl 输出的地方。与原生 perl 的输出相反,Msys perl 生成带有 CRLF 字符的输出。在 TAP 代码中已经有一些地方,其中 CRLF (\r\n) 在 Msys 上自动转换为 LF (\n),但在运行命令并使用其输出进行比较时,我们遗漏了一些地方,这会导致失败。由于使用 TestLib::command_checks_all() 在 5adb067 中添加的测试,发现了这个问题,但在仔细检查后,发现有更多代码路径缺少过滤器。这可以一直回溯,以防止在稳定分支中引入新测试时出现任何意外。审核人:Andrew Dunstan、Álvaro Herrera 讨论:https://postgr.es/m/1252480.1631829409@sss.pgh.pa.us 回溯到:9.6 https://git.postgresql.org/pg/commitdiff/0d91c52a8fc71bfe5664a13368e42e1dabc5fe78
修复 postgres -C 的 TAP 测试的一些问题。这解决了在 0c39c292 中为运行时 GUC 添加的测试的两个问题:- 在 Msys 上重新启用测试。由于 Msys perl 生成的 \r\n,测试可能会失败。0d91c52a 已经处理了这个问题。- 允许测试在特权帐户的上下文中运行。在特权帐户下运行的 CI 会因权限失败而失败,正如 Andres Freund 所报告的那样。这个问题通过将 postgres 命令包装在 pg_ctl 中来解决,因为后者会处理任何所需的权限。删除了检查运行时参数(具有正在运行的实例)的 postgres -C 失败的测试,因为 pg_ctl 会产生不稳定的错误代码(不需要 CI 来重现)。讨论:https://postgr.es/m/20210921032040.lyl4lcax37aedx2x@alap3.anarazel.de https://git.postgresql.org/pg/commitdiff/1a9d802828110c87a207785aaf6b00d8917a86ad
doc:在 CREATE EVENT TRIGGER 页面中添加缺失的标记。报告人:rir 讨论:https://postgr.es/m/20210924183658.3syyitp3yuxjv2fp@localhost 回溯到:9.6 https://git.postgresql.org/pg/commitdiff/1ab70b11e6425c955c24aa301188de32356bebb8
doc:改进使用 GUC 的索引清理描述。根据存储的死元组的数量,索引清理可能会发生多次,就像手动 VACUUM 的 maintenance_work_mem 一样。对于自动清理,如果设置了,则由 autovacuum_work_mem 控制。该文档提到了前者,但在自动清理的上下文中没有提到后者。报告人:Nikolai Berkoff 作者:Laurenz Albe、Euler Taveira 讨论:https://postgr.es/m/161545365522.10134.12195402324485546870@wrigleys.postgresql.org 回溯到:9.6 https://git.postgresql.org/pg/commitdiff/1ba841072ebeb1a6605395950a51c869de42a104
修复文档中的拼写错误。作者:Justin Pryzby 讨论:https://postgr.es/m/20210924215827.GS831@telsasoft.com 回溯到:9.6 https://git.postgresql.org/pg/commitdiff/7c1d8a243f8bd46604c9b292f392aab170eed821
Amit Kapila 推送了
在 reorderbuffer.c 中的错误中添加父表名称。这可以帮助排除解码期间可能发生的特定错误的原因。作者:Jeremy Schneider 审核人:Amit Kapila 讨论:https://postgr.es/m/808ed65b-994c-915a-361c-577f088b837f@amazon.com https://git.postgresql.org/pg/commitdiff/5e77625b260a781316bb94ea9750dc66c50152bf
使发布中的分区表的所有分区无效。即使在父表添加到发布后,也允许对分区进行更新/删除,而无需副本标识。这稍后会导致订阅者出现错误。原因是,我们没有使分区的 relcache 无效,并且没有重建分区的发布信息。同样,在从发布中删除分区表后,我们也没有使分区的 relcache 无效,这将禁止在没有任何发布的情况下对没有副本标识的分区进行更新/删除。报告人:Haiying Tang 作者:Hou Zhijie 和 Vignesh C 审核人:Vignesh C 和 Amit Kapila 回溯到:13 讨论:https://postgr.es/m/OS0PR01MB6113D77F583C922F1CEAA1C3FBD29@OS0PR01MB6113.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/4548c76738b368a11a5dad052f9653a349eeb52c
Peter Eisentraut 推送了
使用 PG_INT64_MAX/PG_INT64_MIN。此代码是在引入这些符号之前编写的,但现在我们可以简化它。https://git.postgresql.org/pg/commitdiff/f9ea2960310c235a7ae97847c0757eba9f6f9a85
添加缺失的 $Test::Builder::Level 设置。其中一个被 c50624c 意外删除。其他的是类比添加的。讨论:https://postgresql.ac.cn/message-id/ae1143fb-455c-c80f-ed66-78d45bd93303@enterprisedb.com https://git.postgresql.org/pg/commitdiff/73aa5e0cafd0d577fe464ed1d9ac317103f27ea4
Fujii Masao 推送了
Alexander Korotkov 推送了
John Naylor 推送了
将 unicode_east_asian_fw_table.h 的异常添加到 cpluspluscheck。unicode_east_asian_fw_table.h 不应像 unicode_combining_table.h 一样单独编译,但 cpluspluscheck 没有收到通知。bab982161 中的疏忽。根据 Tom Lane 的报告 https://git.postgresql.org/pg/commitdiff/a315b19cceeb2ccbe17c7ddd6e7c90911b325f9b
还将 unicode_east_asian_fw_table.h 的异常添加到 headerscheck 中。对 a315b19cc 的后续操作 https://git.postgresql.org/pg/commitdiff/88b0ae15bc099df6192a3b69b853f86fb015339a