支持的版本: 9.5

E.1. Release 9.5.20

发布日期: 2019-11-14

此版本包含自9.5.19起的各种修复程序. 有关9.5主发行版中新功能的信息,请参阅第E.21节 .

E.1.1. Migration to Version 9.5.20

运行9.5.X的用户不需要转储/还原.

但是,如果将contrib / intarray扩展名与GiST索引一起使用,并且依赖于索引搜索的<@运算符,请参见下面的条目.

Also, if you are upgrading from a version earlier than 9.5.13, see Section E.8.

E.1.2. Changes

  • 如果并非所有父表都被更改,则不允许更改乘法继承列的类型(Tom Lane)

    以前,这是允许的,因此对现在不同步的父级的查询将失败.

  • 防止VACUUM尝试冻结涉及仍在运行的事务的旧的多产品ID(Nathan Bossart,Jeremy Schneider)

    这种情况将导致VACUUM失败,直到旧事务终止.

  • 确保在处理查询的表达式时处理WINDOW子句中的偏移量表达式(Andrew Gierth)

    当偏移量是非平凡的表达式时,这种疏忽可能导致各种各样的失败. 一个示例是,如果内联函数,则此类表达式中的函数参数引用将失败.

  • 修复了WITH CHECK OPTION表达式和行级安全策略表达式(Andres Freund)中的整行变量的处理

    以前,这种用法可能会导致有关行类型不匹配的虚假错误.

  • 如果在没有postmaster子进程数组插槽可用的情况下并行查询请求后台工作程序,则避免postmaster失败(Tom Lane)

  • 如果BEFORE UPDATE触发器按原样返回旧的元组,而不是最后一个这样的触发器,则防止可能的双重释放(Thomas Munro)

  • 在并行工作程序启动期间设置GUC参数时发生错误时,提供相关的错误上下文行(Thomas Munro)

  • 在可序列化模式下,确保在正确版本的行(Thomas Munro,Heikki Linnakangas)上获取行级谓词锁

    如果该行的可见版本进行了HOT更新,则该锁可能会在其已死的前任上获得锁定,从而导致微妙的故障,无法保证序列化.

  • Ensure that fsync() is applied only to files that are opened read/write (Andres Freund, Michael Paquier)

    某些代码路径在以只读方式打开文件后尝试执行此操作,但在某些平台上会导致"错误的文件描述符"或类似错误.

  • 允许编码转换在更长的字符串上成功完成(ÁlvaroHerrera,Tom Lane)

    以前,输入字符串的硬限制为0.25GB,但现在只要转换后的输出不超过1GB,它就可以使用.

  • 当大块的大小减小时,允许repalloc()返回空间(Tom Lane)

  • 确保在存档恢复结束时删除临时的WAL和历史记录文件(Sawada Masahiko)

  • 在归档恢复避免失败,如果recovery_min_apply_delay启用(藤井正雄)

    recovery_min_apply_delay通常不在此配置中使用,但是应该可以使用.

  • 避免在逻辑复制walsender关机期间出现不必要的延迟(Craig Ringer,ÁlvaroHerrera)

  • 正确地为时间戳复制消息进行逻辑解码(Jeff Janes)

    例如,这种疏忽导致了pg_stat_subscription . last_msg_send_time通常读取为NULL.

  • 在逻辑解码中,请确保在重建快照时正确考虑了子事务(泽田正彦)

    该错误导致断言失败. 目前尚不清楚生产版本中是否存在任何不良影响.

  • 当后端进程先前已等待同步复制发生时,修复后端退出期间的竞争状况(刘东明)

  • 修复ALTER SYSTEM以应对postgresql.auto.conf中的重复条目(Ian Barwick)

    ALTER SYSTEM本身不会生成这种状态,但是修改postgresql.auto.conf的外部工具可以生成这种状态. 现在将删除目标变量的重复条目,然后在末尾附加新设置(如果有).

  • 拒绝配置文件中包含空文件名的包含指令,并更清楚地报告包含文件的递归(Ian Barwick,Tom Lane)

  • 使用PAM身份验证时,避免记录有关废弃连接的投诉(Tom Lane)

    基于libpq的客户端通常在需要密码时会进行两次连接尝试,因为在第一次连接尝试失败之前,它们不会提示用户输入密码. 因此,当客户端在询问密码时关闭连接时,服务器被编码为不会产生无用的日志垃圾邮件. 但是,PAM身份验证代码尚未获得该备忘,并且会生成一些有关幻像身份验证失败的消息.

  • 修复某些情况下在使用时区输入未及时检测到不完整的日期规范的情况下(Alexander Lakhin)

    如果指定了时区UTC偏移量的时区,则日期也必须是正确的,以便可以解决偏移量. 根据使用的语法,在某些情况下不会强制执行此检查,从而导致产生伪造的输出.

  • 修复bitshiftright()不良行为(汤姆·莱恩)

    当位串长度不是8的倍数时,位串右移运算符无法将结果的最后一个字节中存在的填充空间清零.尽管对于大多数操作不可见,但任何非零位都将导致意外的比较行为,因为位串比较不会费心忽略多余的位,期望它们始终为零.

    如果由于将bitshiftright()的输出保存在表中而导致数据不一致,则可以使用以下方法修复它:

    UPDATE mytab SET bitcol = ~(~bitcol) WHERE bitcol != ~(~bitcol);
  • 修复间隔乘法中边缘情况整数溢出的检测(Yuya Watari)

  • 修复GIN发布列表的错误压缩逻辑(Heikki Linnakangas)

    如果相邻索引的TID之间的距离超过16TB,则GIN发布列表项可能需要7个字节. 逻辑中的一个步骤与此不同步,可能会尝试将值写入6字节缓冲区. 原则上,这可能会导致堆栈溢出,但是在大多数体系结构上,下一个字节可能是未使用的对齐填充,从而使该错误无害. 无论如何,该错误都很难被发现.

  • 修复了KNN-GiST(Alexander Korotkov)中对无穷大,NaN和NULL值的处理

    如果为非空列值计算的某些距离是无穷大或NaN,则查询的输出顺序可能是错误的(与普通排序的结果不同).

  • 修复在KNN-SP-GiST(Nikita Glukhov)中搜索NULL的处理

  • 在Windows上,识别" Norwegian(Bokmål)"区域设置名称(Tom Lane)的其他拼写

  • 避免编译失败如果ECPG客户端包括ecpglib.h同时具有ENABLE_NLS定义(汤姆泳道)

    此风险是由声明放错位置造成的: ecpg_gettext()对客户端代码不可见.

  • psql中 ,在意外的连接丢失和成功的重新连接之后,重新同步服务器的内部状态(Peter Billen,Tom Lane)

    通常,这是不必要的,因为无论如何状态都是相同的. 但这在某些情况下可能很重要,例如在连接可能指向多个服务器之一的情况下. 此更改使psql重新发出启动时可能发出的任何交互式消息,例如有关是否正在使用SSL的消息.

  • psql中避免平台特定的空指针取消引用(Quentin Rameau)

  • 修复pg_dump对视图中循环依赖项的处理(Tom Lane)

    在某些情况下,视图可能取决于pg_dump需要比视图晚转储的对象. 最常见的示例是,在没有主键的情况下,对主键列使用GROUP BY的查询在语义上可能是无效的. 现在,可以通过发出伪CREATE VIEW命令(仅建立视图的列名和类型),然后再发出具有完整视图定义的CREATE OR REPLACE VIEW来处理此问题. 以前,虚拟定义实际上是CREATE TABLE命令,并且后来的CREATE RULE命令将其自动转换为视图. 新方法已在PostgreSQL 10及更高版本中成功使用. 由于有报道称前一种方法导致有关视图副本身份状态的虚假错误消息,我们现在将其重新修补到较早的发行版中. 此更改还避免了在涉及此类视图的还原期间尝试使用--clean选项时出现的问题.

  • pg_dump中 ,确保类似名称的触发器和行级安全策略对象的稳定输出顺序(Benjie Gillam)

    以前,如果不同表上的两个触发器具有相同的名称,则它们将基于基于OID的顺序进行排序,这比按表名对它们进行排序不太可取. 对于RLS策略也是如此.

  • 修复pg_dump以再次与8.3之前版本的源服务器一起工作(Tom Lane)

    先前的修复导致pg_dump始终尝试查询pg_opfamily ,但是该目录在8.3版之前不存在.

  • pg_restore中 ,将-f-视为"输出到stdout" (ÁlvaroHerrera)

    这可以使pg_restore的行为与其他一些应用程序同步,特别是使v12之前的分支的行为类似于版本12的pg_restore ,从而简化了跨多个PostgreSQL版本工作的转储/恢复脚本的创建. 在进行此更改之前, pg_restore将此开关解释为"输出到名为-的文件"的意思 ,但是很少有人会希望这样做.

  • 改进pg_upgrade的检查,以检查是否更改了表示形式的数据类型,例如line (Tomas Vondra)

    如果感兴趣的数据类型位于域或复合类型的存储列的下面,则可能会愚弄先前的编码.

  • pg_basebackup期间检测文件读取错误(Jeevan Chalke)

  • 在具有在线源集群的pg_rewind中 ,禁用超时,就像pg_dump一样(Alexander Kukushkin)

  • 当连续WAL记录正好在页面边界处结束时,使用-s选项修复pg_waldump中的失败(Andrey Lepikhov)

  • pg_waldump中 ,在btree页拆分记录中包含newitemoff字段(Peter Geoghegan)

  • In pg_waldump with the --bkp-details option, avoid emitting extra newlines for WAL records involving full-page writes (Andres Freund)

  • 修复pg_waldump (Andres Freund)中的小内存泄漏

  • 使用高--jobs选项修复vacuumdb以更好地处理文件描述符不足的问题(Michael Paquier)

  • 修复contrib / intarray的GiST opclass不会因<@ (Tom Lane)的空数组而失败

    array_column <@ constant_array这样的子句被认为是可索引的,但是索引搜索可能找不到空数组值. 当然,此类条目应与搜索简单匹配.

    为此,唯一可行的可后修补程序解决方案是使<@索引搜索扫描整个索引,而此修补程序正是这样做的. 这很不幸:这意味着查询性能可能比普通顺序扫描要差.

    性能受到此更改不利影响的应用程序有两种选择. 他们可以切换到没有此错误的GIN索引,也可以将array_column <@ constant_array替换为array_column <@ constant_array AND array_column && constant_array . 这将提供与以前几乎相同的性能,并且将找到给定常量数组的所有非空子集,这是查询之前可以可靠地期望的全部.

  • 当只能找到python3或只有python2时,允许configure --with-python成功(Peter Eisentraut,Tom Lane)

    先搜索python ,然后搜索python3 ,然后搜索python2 ,以便configure可以在越来越常见的情况下成功,在这种情况下,没有名为简单python的可执行文件. 仍然可以通过设置PYTHON环境变量来覆盖此选择.

  • 修复configure的libperl的测试,以便它可以在最新的Red Hat版本中使用(Tom Lane)

    以前,如果用户将CFLAGS设置为-O0 ,它可能会失败.

  • 确保在PowerPC上正确生成自旋锁的代码(Noah Misch)

    先前的自旋锁编码允许编译器选择寄存器零,以与不接受该寄存器的汇编指令一起使用,从而导致构建失败. 我们仅看到一个与此错误相称的长期报告,但对于试图构建经过修改的PostgreSQL代码或使用非典型编译器选项的人来说,这可能会引起问题.

  • 在PowerPC上,避免依赖xlc编译器的__fetch_and_add()函数(Noah Misch)

    xlc 13及更高版本以与我们的用法不兼容的方式解释此功能,从而导致无法使用PostgreSQL构建. 通过改用自定义汇编代码进行修复.

  • 在AIX上,请勿使用编译器选项-qsrcmsg (Noah Misch)

    这避免了xlc v16.1.0的内部编译器错误,除了更改编译器错误消息的格式外,几乎没有其他后果.

  • 修复MSVC生成过程,以处理OpenSSL文件路径中的空格(Andrew Dunstan)

  • 将时区数据文件更新为tzdata版本2019c,以进行斐济和诺福克岛DST法律变更,以及阿尔伯塔省,奥地利,比利时,不列颠哥伦比亚省,柬埔寨,香港,印第安纳州(佩里县),加里宁格勒,肯塔基州,密歇根州,诺福克郡的历史更正岛,韩国和土耳其.

Submit correction

如果您在文档中发现任何不正确的内容,与特定功能不匹配的经验或需要进一步说明,请使用此表格报告文档问题.

by  ICOPY.SITE