E.1。13.5版本

发行日期:2021-11-11

此版本包含13.4中的各种修复程序。有关主要版本13中新功能的信息,请参阅部分E.6

E.1.1。迁移到13.5版

运行13.X的系统不需要转储/还原。

但是,请注意,使用物理复制的安装应在主服务器之前更新备用服务器,如下面第三个changelog条目所述。

此外,还发现了一些可能导致索引损坏的bug,如下面几个changelog条目中所述。如果其中任何一种情况适用于您,建议您在更新后重新索引可能受影响的索引。

此外,如果您是从13.2以前的版本升级,请参阅部分E.4

E.1.2。变化

  • 使服务器在SSL或GSS加密握手后拒绝多余的数据(Tom Lane)

    中间的一个人能够将数据注入TCP连接,他可以将一些明文数据填充到假定受加密保护的数据库会话的开始。这可能被滥用以向服务器发送伪造的SQL命令,尽管只有在服务器不要求任何身份验证数据的情况下,这才有效。(但是,依赖SSL证书身份验证的服务器可能不会这样做。)

    PostgreSQLProject感谢Jacob Champion报告了这个问题。(cve - 2021 - 23214)

  • 使libpq在SSL或GSS加密握手后拒绝多余的数据(Tom Lane)

    一个有能力将数据注入TCP连接的中间人可以将一些明文数据塞到一个被认为是加密保护的数据库会话的开始。尽管libpq行为的其他细节使这比听起来更难,但这可能被滥用,以向客户端的前几个查询注入虚假响应。另一种攻击方式是窃取可能在会话早期发送的客户端密码或其他敏感数据。这已经被证明是可能的,因为服务器容易受到CVE-2021-23214的攻击。

    PostgreSQLProject感谢Jacob Champion报告了这个问题。(cve - 2021 - 23222)

  • 修复了在发送了以部分WAL记录结束的WAL段后主服务器崩溃的物理复制(Álvaro Herrera)

    如果主存没有足够长的时间来写完剩余的不完整WAL记录,那么之前的崩溃恢复逻辑会备份它,并从不完整WAL记录的开始覆盖WAL。这是一个问题,因为备用服务器可能已经有WAL段的副本。然后,他们将看到一个不一致的下一段,并且将无法在没有人工干预的情况下恢复。为了解决这个问题,当崩溃后重新启动时,不要在WAL段边界上进行备份。相反,在下一个WAL段开始时写一个新的WAL记录类型,告诉读者不完整的WAL记录永远不会被完成,必须被忽略。

    应用此更新时,最好在主服务器之前更新备用服务器,以便在主服务器崩溃时,它们可以处理此新的WAL记录类型。

  • 修理同时创建索引等待最近准备好的交易(安德烈·博罗丁)

    由刚刚准备好的事务插入的行可能会从新索引中删除,从而导致依赖于索引的查询会错过这些行。针对这类问题的上一个修复没有考虑到准备事务仍在执行中的命令同时创建索引为他们检查。与前面一样,在已启用准备事务的安装中(max_prepared_transactions> 0),建议重新索引所有并发构建的索引,以防在构建时出现此问题。

  • 避免竞态条件,这会导致后端无法为正在并发构建的索引添加新行条目(Noah Misch, Andrey Borodin)

    虽然这种情况在该领域很少见,但这种情况可能会影响使用同时选项建议对任何此类索引重新编制索引,以确保它们是正确的。

  • 修理float4float8为nan产生一致结果的哈希函数(Tom Lane)

    自从PostgreSQL的浮点类型认为所有nan都是相等的,因此根据IEEE 754标准,哈希函数为所有的nan位模式产生相同的哈希码是很重要的。这种情况以前没有发生,这意味着散列索引和基于散列的查询计划可能会为非规范NaN值产生不正确的结果。(“南”::float8是在大多数机器上产生这种值的一种方法)。建议对浮点列重索引哈希索引,如果它们有可能包含这样的值。

  • 修理同时重新编制索引保留附加到目标索引的操作符类参数(Michael Paquier)

  • 防止在系统崩溃恢复期间丢失数据创建表空间什么时候瓦卢层最小的(诺亚米诗)

    如果服务器崩溃之间创建表空间而下一个检查点,重放将完全删除新表空间目录的内容,依赖于后续的WAL重放来恢复该目录中的所有内容。这与跳过写WAL的优化交互很差(一个例子是复制放入刚刚创建的表中)。只有在以下情况下才应用此类优化瓦卢层最小的,这不是v10和更高版本中的默认值。

  • 确保关系缓存对于附加到分区表或从分区表分离的表无效(Amit Langote,Álvaro Herrera)

    这种疏忽可能导致后续插入/更新的错误行为直接指向分区,但只在当前存在的会话中。

  • 确保正在添加或从发布中删除的分区表的所有分区的关系缓存无效(侯志杰,Vignesh C)

    这种疏忽可能导致不恰当的复制行为,直到当前存在的所有会话都退出为止。

  • 确保在创建或删除关系缓存时关系缓存无效所有表格侯志杰,Vignesh C)

    这种疏忽可能导致不恰当的复制行为,直到当前存在的所有会话都退出为止。

  • 不要丢弃具有未指定类型修饰符的相同类型的强制转换(汤姆莱恩)

    例如,if列f1的类型是数字(18,3),解析器用来简单地丢弃一个cast-like外国游客1::数字,理由是它不会对运行时产生影响。这是真的,但是表达式的暴露类型仍然应该被认为是普通的数字的数字(18,3).这对于正确解析较大构造(如递归)的类型非常重要协会年代。

  • 修复了复合域数组中元素字段的更新(Tom Lane)

    命令,例如更新选项卡设置fld[1]。subfld =瓦尔如果数组的元素是域而不是普通组合,则失败。

  • 不允许将先打领带为更新跳过锁定(大卫·克里斯坦森)

    先打领带必须比请求的行多取一行,因为它无法停止,直到它找到一个不是平局的行。在我们当前的实施中,如果更新,则即使未返回该行,该行也将被锁定。这会导致不良行为,如果跳过锁选项已指定。如果不引入一组不同的不良行为,很难改变这种情况,因此现在,禁止这种组合。

  • 如果当前数据库的编码不支持ICU排序,则不允许创建它(Tom Lane)

    以前这是允许的,但是由于排序规则查找的方式,不能引用排序规则;您不能使用排序,甚至不能丢弃它。

  • 不允许ALTER COLUMN col SET (options)(内森·博萨特迈克尔·帕奎尔)

    虽然解析器接受了这一点,但它没有文档记录,实际上不起作用。

  • 修正了数字精度的角情况损失权力()(迪安·拉希德)

    当第一个参数非常接近1时,结果可能不准确。

  • 避免包含括号的正则表达式错误{0}(汤姆巷)

    正则表达式,如(){0}…\ 1画了无效的backreference数量. 不过,其他regexp引擎(如Perl)不会抱怨,就这一点而言,我们的引擎在一些密切相关的情况下也不会抱怨。更糟糕的是,它可能会抛出断言失败。修复它,这样就不会抛出错误,相反,back引用会被默认为从不匹配。

  • 防止正则表达式的反向引用有时不应该匹配(汤姆·莱恩)

    在拒绝部分匹配后,regexp引擎不小心清除匹配数据以捕获括号。这可能允许以后的反向引用在由于缺少已定义的引用而失败的地方进行匹配。

  • 修复在迭代节点内使用反向引用的正则表达式性能错误(Tom Lane)

    不正确的回溯逻辑可能导致花在寻找匹配上的时间呈指数增长。幸运的是,在大多数情况下,这个问题被其他优化所掩盖。

  • 修复来自的错误结果时区适用于时区时间值(汤姆巷)

    如果目标时区是由动态时区缩写(即定义为等效于完整时区名称而不是固定的UTC偏移量的时区缩写)指定的,则结果是不正确的。

  • 修复了将子查询表达式拉入函数范围条目的规划器错误(Tom Lane)

    如果函数在从…起横向引用某个子的输出选择早些时候从…起条款,我们就能把那艘潜艇夷为平地选择在外部查询中,没有完全处理复制到函数表达式中的表达式。这可能导致执行时崩溃。

  • 修正PlaceHolderVars对继承子关系的误译(汤姆·莱恩)

    此错误可能导致断言失败,或者在外部连接的可空端有分区表或继承表的查询规划错误。

  • 避免使用仅MCV统计数据来估计列的范围(Tom Lane)

    有些角落的案例分析将构建一个最常见值(MCV)列表,而不是一个直方图,即使MCV列表不能解释所有的观测值。在这种情况下,不要让规划器单独使用MCV列表来估计列值的范围。

  • 修复子事务中门户快照的恢复(Bertrand Drouvot)

    如果一个过程提交或回滚一个事务,然后它的下一个重要操作在一个新的子事务中,快照管理出错,导致悬空指针和可能的崩溃。PL/pgSQL中的一个典型例子是犯罪紧接着是开始……异常执行查询的块。

  • 在导出快照后,如果事务失败,则正确地进行清理(Dilip Kumar)

    只有在同一会话试图再次导出快照时,这种疏忽才会导致问题。最可能的场景是创建一个复制槽(然后是回滚),然后创建另一个复制槽。

  • 防止在备用服务器上对溢出的子事务进行跟踪(Kyotaro Horiguchi, Alexander Korotkov)

    这种疏忽可能会导致备用服务器上显著的性能下降(表现为过多的SubtransSLRU流量)。

  • 确保准备好的事务在备用服务器的提升过程中得到适当的解释(Michael Paquier, Andres Freund)

    在一个狭窄的窗口中,可以从并发运行的会话所拍摄的快照中省略准备好的事务。如果该会话随后使用快照执行数据更新,则可能会出现错误结果或数据损坏。

  • 不允许在幕后工作的人(汤姆莱恩)

    没有基础设施来支持这个,所以如果有人这么做了,只会阻止清理通知队列中。

  • 邮寄通知在事务提交期间向其他后端发送信号,而不是在服务器的空闲循环中(Artur Zakirov, Tom Lane)

    此更改允许在内部过程之后立即传递通知犯罪. 它还允许逻辑复制工作人员发送通知。

  • 拒绝倒带光标标记无卷轴如果它已经从之前的交易中被保留下来与持有选项(汤姆巷)

    我们很久以前就禁止从无卷轴游标,但由于历史原因,这种限制并没有扩展到完全倒回查询然后重新向前获取的情况。这种异常会导致不一致,特别是对于可能没有存储回滚所需的所有数据的保留游标。禁止对不可滚动的保留游标进行倒带,以阻止最严重的不一致。(v15将完全删除异常。)

  • 修复保存时可能出现的故障与持有在事务结束时游标,如果它已经读到完成(汤姆莱恩)

  • 修复已增长到最大允许长度的关系的检测(汤姆莱恩)

    试图扩展表或索引超过2^32-1个块的限制的尝试被拒绝,但还不足以阻止创建不一致的内部状态。

  • 当扩展时,正确跟踪数据修改cte的存在做的规则(Greg Nancarrow,Tom Lane)

    此前未能做到这一点可能会导致诸如不安全地选择并行计划等问题。

  • 修复扩展统计对象(Tomas Vondra)权限失败的错误报告

    通常生成的代码缓存查找错误而不是预期的信息。

  • 修复了不正确的快照处理(Greg Nancarrow)

    如果事务隔离级别低于可重复读取

  • 修复逻辑解码以正确忽略瞬态表的toast表更改(Bertrand Drouvot)

    逻辑解码通常忽略瞬态表中的更改,例如在ALTER TABLE堆重写。但是这个过滤没有应用到相关的toast表(如果有的话),这可能导致在重写正在发布的表时出现错误。

  • 修复逻辑解码的内存使用计费,以正确处理TOAST数据(Bertrand Drouvot)

  • 确保walreceiver进程在退出之前创建所有必需的归档通知文件(Fujii Masao)

    如果walreceiver正好在WAL段边界退出,则它无法为最后接收的段创建通知文件,从而延迟了该段在standby上的归档。

  • 修正了涉及时间线更改时要包含在备份清单中的WAL范围的计算(Kyotaro Horiguchi)

  • 避免试图锁定使用选择以进行更新(泽田正彦,汤姆·莱恩)

  • 修复解析器对聚合的处理过滤器条款(汤姆巷)

    如果过滤器表达式是纯布尔列,聚合的语义级别可能会错误确定,从而导致不符合规范的行为。如果过滤器表达式本身是一个布尔返回聚合,应该抛出一个错误,但没有抛出,可能导致执行时崩溃。

  • 在重命名表时,确保使用正确的锁级别(Nathan Bossart, Álvaro Herrera)

    由于历史原因,,改变索引。。。改名可以应用于任何类型的关系。重命名索引所需的锁级别低于重命名表或其他类型的关系所需的锁级别,但代码的这一点是错误的,在拼写命令时会使用较弱的锁级别改变索引

  • 防止更改类型/域/运算符。。。设置更改扩展会员(汤姆·莱恩)

    改变,更改集如果目标对象尚未成为扩展的成员,则由扩展脚本执行将导致目标对象成为扩展的成员。这本身并不太麻烦,因为扩展脚本几乎没有理由接触不属于扩展的对象。但是改变类型设置将递归到依赖域,从而使它们也成为扩展成员。这会导致扩展升级脚本产生不必要的副作用,这些脚本使用该命令调整属于扩展的基类型的属性。通过重新定义这些改变,更改决不更改扩展成员资格的案例。

  • 避免在LLVM中发生错误后尝试清理LLVM状态(Andres Freund,Justin Pryzby)

    这可以防止在致命的LLVM错误后后台退出时发生崩溃。

  • 当删除一个同时拥有被删除对象的角色时,避免空指针解引用崩溃(Álvaro Herrera)

  • 防止快照引用泄漏警告时lo_export ()或相关功能失效(Heikki Linnakangas)

  • 确保统计视图中统计SP GiST索引的扫描(Tom Lane)

    在SP-GiST代码中,尽管每个元组计数器都被正确地提高了,但索引扫描计数器的数量的增加被忽略了。

  • 修复了CoerceToDomain表达式节点低效的代码生成(Ranier Vilela)

  • 如果需要,请重新计算相关等待间隔recovery_min_apply_delay在恢复过程中发生变化(Soumyadeep Chakraborty,Ashwin Agrawal)

  • 修复无限循环simplehash.h哈希表达到2^32个元素(Yura Sokolov)

    在实践中似乎不太可能像它所要求的那样击中这个错误work_mem为现有用途的数百gb的设置simplehash.h

  • 在一些列表操作操作中避免O(N^2)行为(Nathan Bossart,Tom Lane)

    这些更改修复了几种情况下的缓慢处理,包括:当备用服务器重放在主服务器上持有许多独占锁的事务时;当许多文件由于在检查点后被解除链接;当散列聚合涉及多个批次时;当pg_trgm从复杂正则表达式中提取可索引条件。事实上,只有第一种情况从现场得到了报告,但它们似乎都是无效列表删除的合理结果。

  • 在计算扩展统计信息时减少内存消耗(Justin Pryzby, Tomas Vondra)

  • 围绕B树发布列表拆分添加更多防御检查(Peter Geoghegan)

    此更改应有助于检测涉及重复表TID的索引损坏。

  • 不允许设置巨大的书页什么时候共享内存类型sysv(托马斯·蒙罗)

    以前,这个设置是被接受的,但由于缺乏任何实现,它什么也没做。

  • 固定失踪libpqAIX上的函数(Tony Reix)

    代码重组导致以下有文档记录的函数无法从导出libpq在AIX上:pg_encoding_to_char ()pg_utf_mblen()pg_char_to_encoding ()pg_有效_服务器_编码(),pg_valid_server_encoding_id (). 将它们恢复为可见性。

  • 修理ecpg正确恢复malloc ()建立连接时失败(迈克尔帕奎尔)

  • 修复在PL/pgSQL的参数中调用的稳定函数的错误计算调用语句(汤姆巷)

    使用过期快照调用它们,这样它们就不会看到自会话的顶级命令开始以来所做的任何数据库更改。

  • 允许退出在PL/pgSQL例程(Tom Lane)的最外层块之外

    如果例程不需要显式回来,此用法应该是有效的,但被拒绝。

  • 删除pg_ctl的硬编码限制生成的命令的总长度(菲尔克雷洛夫)

    例如,这消除了对可以传递给postmaster的命令行选项数量的限制。单独的路径名pg_ctl处理,例如postmaster可执行文件的名称或数据目录的名称,仍然受到限制MAXPGPATH大多数情况下是字节。

  • 修理垃圾场正确转储非全局默认特权(Neil Chen, Masahiko Sawada)

    如果是全局的(无限制的)更改默认权限例如,命令取消了某些默认权限处决对于函数,然后是受限的更改默认权限命令再次为所选角色或架构授予该权限,垃圾场无法正确转储受限制的权限授予。

  • 使垃圾场获取要转储的分区表上的共享锁(Tom Lane)

    这种疏忽通常是无害的,因为有一次垃圾场已锁定任何叶分区,这将足以防止分区表本身上的重要DDL。然而,在转储无子分区表时可能会出现问题,因为不会持有相关的锁。

  • 改善垃圾场通过避免对RLS策略进行逐表查询,以及避免重复调用格式(u type)(汤姆巷)

    当从本地服务器转储数据时,这些更改只提供了少量的改进,但是从远程服务器转储数据可以从很大程度上受益,因为更少的网络往返。

  • 修复崩溃垃圾场当试图从8.3之前的服务器转储触发器定义时(Tom Lane)

  • 修复中不正确的文件名pg_restore有关无效大对象TOC文件的错误消息(Daniel Gustafsson)

  • 确保pgbench在socket级故障后以非零状态退出(Yugo Nagata, Fabien Coelho)

    所需的行为是完成运行,然后以状态2退出。此外,修复此类错误的报告。

  • 修复的失败contrib / btree_gin上的索引“字符”(不char (n)列时,索引扫描使用<<=执行操作员操作(汤姆·莱恩)

    这样的indexscan无法返回它应该返回的所有条目。

  • 改变contrib / pg_stat_statements阅读查询文本文件的单位不超过1GB (Tom Lane)

    如此大的查询文本文件是非常罕见的,但如果它们真的发生了,之前的编码将在Windows 64上失败(它拒绝超过2GB的单个读请求)。

  • 修复空指针崩溃时参保/博士后尝试报告数据转换错误(Tom Lane)

  • 为RISC-V体系结构添加自旋锁支持(Marek Szuba)

    这对于该平台上的合理性能至关重要。

  • 支持OpenSSL 3.0.0 (Peter Eisentraut, Daniel Gustafsson, Michael Paquier)

  • 在由创建的OpenSSL BIO(I/O抽象)对象上设置正确的类型标识符PostgreSQL(伊塔马尔·加夫尼)

    这种疏忽可能只对执行审计OpenSSL安装等任务的代码有影响。但它名义上违反了OpenSSL API,所以请修复它。

  • 解决我们的包装配置再次支持静态链接的文件libpq(彼得·Eisentraut)

  • 使pg_regexec ()对超出射程的物体有很强的抵抗力search_start参数(汤姆巷)

    返回雷格诺马奇,而不是可能崩溃,当search_start超过了字符串的末尾。这种情况在core中可能无法实现PostgreSQL,但是扩展可能对参数值更加粗心。

  • 确保GetSharedSecurityLabel ()可以在尚未构建关键关系缓存项的新启动的会话中使用(Jeff Davis)

  • 使用CLDR项目的数据将Windows时区名称映射到IANA时区(Tom Lane)

    在Windows上运行时,initdb尝试设置新集群的时区参数设置为与系统当前时区匹配的IANA时区。我们使用的是多年前生成的映射表,只是偶尔更新;不出所料,它包含许多错误以及遗漏了最近添加的区域。事实证明,CLDR一直在跟踪最合适的映射,因此开始使用它们的数据。此更改不会影响任何现有的安装,只会影响新初始化的集群。

  • 将时区数据文件更新到tzdata发布2021e,了解斐济、约旦、巴勒斯坦和萨摩亚的DST法律变更,以及巴巴多斯、库克群岛、圭亚那、纽埃、葡萄牙和汤加的历史更正。

    此外,太平洋/恩德伯里区已更名为太平洋/坎顿。此外,自1970年以来,以下区域已并入附近人口较多的区域,其时钟与这些区域一致:非洲/阿克拉、美洲/阿提科坎、美洲/布兰科萨布伦、美洲/克雷斯顿、美洲/库拉索、美洲/拿骚、美洲/西班牙港、南极洲/杜蒙杜维尔和南极洲/西奥瓦。在所有这些情况下,以前的分区名称仍保留为别名。

提交修正

如果您在文档中看到任何不正确的东西,与您的经验不符的特188金宝慱网站地址定功能或需要进一步澄清,请使用这种形式报告文档问题。188金宝慱网站地址