E.15. 版本 9.5.5

E.15.1. 迁移到版本 9.5.5
E.15.2. 修改列表

发布日期: 2016-10-27

此版本包含9.5.4的各种修补程序。有关9.5主要版本中的新功能的信息,请查看 第 E.20 节

E.15.1. 迁移到版本 9.5.5

运行9.5.X的用户不需要转储/恢复。

但是,如果您的安装受到以下修改列表中第一条描述的错误的影响, 那么在更新之后,您可能需要采取措施修复损坏的可用空间映射。

另外,如果您从早于9.5.2的版本进行升级, 请查看第 E.18 节

E.15.2. 修改列表

  • 修复关系自由空间映射和可见性映射截断的WAL日志记录 (Pavan Deolasee, Heikki Linnakangas)

    在故障恢复期间可能无法正确恢复这些文件,或者在备用服务器上写入不正确。 自由空间映射中的伪造条目可能导致尝试访问已从关系本身截断的页面, 通常会产生像could not read block XXX: read only 0 of 8192 bytes这样的错误。如果启用校验和, 则可见性映射中的校验和失败也是可能的。

    https://wiki.postgresql.org/wiki/Free_Space_Map_Problems 中讨论确定这是否存在问题和修复它的步骤。

  • 修复在big-endian机器上创建GIN索引WAL记录的错误 (Tom Lane)

    典型的症状是在WAL重播期间出现unexpected GIN leaf action错误。

  • 修复SELECT FOR UPDATE/SHARE 以正确锁定已由随后中止的事务更新的元组 (Álvaro Herrera)

    在9.5及更高版本中,SELECT有时根本无法返回这些元组。 在早期版本中未发生故障,但并发更新可能会发生。

  • 修复涉及CTE扫描的EvalPlanQual重新检查 (Tom Lane)

    重新检查总是会将CTE视为不返回行,通常会导致无法更新最近更新的行。

  • 修复当退出INSERT ... ON CONFLICT时删除推测插入的TOAST元组 (Oskari Saarenmaa)

    在大约同一时间两个事务尝试插入冲突元组的竞态条件下, 如果失败者的插入包括任何TOAST字段,会带有 attempted to delete invisible tuple错误失败。

  • 不要在INSERT ... ON CONFLICT中为自冲突插入抛出序列化错误 (Thomas Munro, Peter Geoghegan)

  • 修复子查询中散列聚合的先前结果的不正确重复 (Andrew Gierth)

    测试以查看我们是否可以重用先前计算的聚合状态值的散列表, 忽略了外部查询引用出现在聚合参数表达式中的可能性。 这种引用的值的改变应该导致重新计算散列表,但是没有。

  • 修复具有PRIMARY KEYREPLICA IDENTITY 索引的表上批量UPDATE中的查询寿命内存泄漏 (Tom Lane)

  • 修复COPY启用了行级安全性的表中的列名列表 (Adam Brightwell)

  • track_io_timing打开时,修复 EXPLAIN发出有效的XML (Markus Winand)

    以前,XML输出格式选项会产生语法上无效的标签,例如<I/O-Read-Time>。 现在这呈现为<I-O-Read-Time>

  • EXPLAIN中禁止将无法测量的时间打印为零 (Maksim Milyutin)

    某些选项组合导致实际上并未在该组合中进行测量的时间打印零值。我们在 EXPLAIN中的一般策略是不打印这些字段, 所以在所有情况下都要一致。

  • 修复准备好的事务中的TRUNCATE的统计信息更新 (Stas Kelvich)

  • 修复VACUUM等待独占表锁定时的超时长度,以便它可以截断表 (Simon Riggs)

    超时时间应该是50毫秒,但实际上它只有50微秒,导致VACUUM 比预期更容易放弃截断。将其设置为预期值。

  • 修复在创建或更改表时合并继承的CHECK约束中的错误 (Tom Lane, Amit Langote)

    允许按照任意顺序将相同的CHECK约束添加到父表和子表中。 阻止合并父表中的有效约束与子节点上的NOT VALID约束。 同样,阻止将NOT INHERIT子约束与继承约束合并。

  • pg_settings.unit 中为min_wal_sizemax_wal_size 显示一个合理的值 (Tom Lane)

  • 删除对numeric_in()numeric_recv() 接受的值的人为限制 (Tom Lane)

    我们允许数值达到存储格式的限制(超过1e100000), 所以看起来毫无意义的是numeric_in()拒绝了高于1000的科学记数法指数。 同样,很愚蠢的是numeric_recv()在输入值中拒绝超过1000位。

  • 避免由于在不保留缓冲区锁定的情况下测试元组可见性而造成非常低概率的数据损坏 (Thomas Munro, Peter Geoghegan, Tom Lane)

  • 跨服务器重启保留提交时间戳 (Julien Rouhaud, Craig Ringer)

    在打开track_commit_timestamp时, 旧的提交时间戳在干净的服务器重新启动后变得不可访问。

  • 当一个子事务的WAL输出足够大以至于溢出到磁盘时,修复逻辑WAL解码以正常工作 (Andres Freund)

  • 修复中止使用缩略密钥时可能的排序错误 (Peter Geoghegan)

    在最坏的情况下,这可能会导致损坏btree索引,这需要使用REINDEX 进行重建。然而,这种情况被认为是罕见的。

  • 修复截断大于1GB的临时关系时的文件描述符泄漏 (Andres Freund)

  • 在开启了standby_mode时,不允许启动一个独立的后端 (Michael Paquier)

    这不能做任何有用的事情,因为没有WAL接收器过程来获取更多的WAL数据; 这可能会导致代码中的错误行为,而这些代码在设计时并未考虑到这种情况。

  • 在回收先前使用的插槽时正确地初始化复制插槽状态 (Michael Paquier)

    无法重置插槽的所有字段可能会阻止VACUUM删除无用的元组。

  • 当试图在Linux上使用大页面时,将共享内存分配请求四舍五入为实际巨大页面大小的倍数 (Tom Lane)

    这避免了在具有非典型默认巨大页面大小的系统上的munmap()期间可能的失败。 除了在故障恢复情况下,除了日志消息外,没有任何不良影响。

  • 对动态共享内存控制段的ID使用更随机的值 (Robert Haas, Tom Lane)

    以前,每次都会选择相同的值,因为它是从random()派生的, 但是尚未调用srandom()。虽然相对无害,但这不是预期的行为。

  • 在Windows上,在拒绝访问错误之后重新尝试创建动态共享内存控制段 (Kyotaro Horiguchi, Amit Kapila)

    当已经有一个段时,Windows有时会返回ERROR_ACCESS_DENIED 而不是ERROR_ALREADY_EXISTS。这导致postmaster启动失败, 因为他们认为前者是一个不可恢复的错误。

  • 修复PL/pgSQL以避免使用int2vectoroidvector类型的参数和局部变量行为不当 (Tom Lane)

  • 不要尝试在libpq中的多个连接之间共享SSL上下文 (Heikki Linnakangas)

    这导致了各种各样的极端情况错误,尤其是在尝试为不同的连接使用不同的SSL参数时。

  • 避免libpq中极端情况内存泄露 (Tom Lane)

    所报告的问题涉及在PQreset()期间泄漏错误报告,但可能存在相关情况。

  • ecpg--help--version 选项与我们的其他可执行文件保持一致 (Haribabu Kommi)

  • 修复pgbench的平均延迟计算 (Fabien Coelho)

    当脚本中存在\sleep命令时, 或者测试持续时间是以事务数而不是总时间指定时,计算结果不正确。

  • pg_upgrade中,按名称顺序检查库的可载入性 (Tom Lane)

    这是一种解决方法,用于处理从语言转换模块到其基本语言和数据类型模块的跨扩展依赖关系。

  • pg_dump中,从不转储范围构造函数 (Tom Lane)

    由于构造函数的重复创建,这种忽略导致pg_upgrade 扩展包含范围类型失败。

  • 在使用-Cpg_dump中, 如果指定了--no-tablespaces,则禁止CREATE DATABASETABLESPACE子句 (Tom Lane)

  • 使pg_receivexlog使用--synchronous 可以正常工作,而无需插槽 (Gabriele Bartolini)

  • 不允许同时为pg_rewind指定--source-server--source-target (Michael Banck)

  • pg_rewind关闭源服务器会话中的 synchronous_commit (Michael Banck, Michael Paquier)

    这允许pg_rewind 在源服务器使用的同步复制由于某种原因不起作用时也能工作。

  • pg_xlogdump中,使用 --follow选项时重试打开新的WAL段 (Magnus Hagander)

    这可以使服务器创建下一个段时可能出现延迟。

  • 修复pg_xlogdump 以处理以跨越多个页面的延续记录开头的WAL文件 (Pavan Deolasee)

  • shared_buffers超过256GB时, 修复contrib/pg_buffercache正常工作 (KaiGai Kohei)

  • 修复contrib/intarray/bench/bench.pl以打印 EXPLAIN在给出-e选项时的结果 (Daniel Gustafsson)

  • 支持 OpenSSL 1.1.0 (Heikki Linnakangas)

  • 安装TAP测试基础架构,以便它可用于扩展测试 (Craig Ringer)

    使用--enable-tap-tests配置PostgreSQL时, make install现在将安装用于TAP测试的Perl支持文件, 其中PGXS可以找到他们。这允许非核心扩展使用$(prove_check) 而无需额外的测试。

  • 在MSVC构建中,在仅客户端安装中包含pg_recvlogical (MauMau)

  • 更新Windows时区映射以识别最近Windows版本中添加的一些时区名称 (Michael Paquier)

  • 防止过时的动态时区缩写失效 (Tom Lane)

    如果动态时区缩写与参考时区中的任何条目都不匹配,请将其视为等同于时区名称。 这避免了IANA从他们的时区数据库中删除缩写时的意外失败,就像他们在 tzdata release 2016f中所做的一样,并且似乎未来可能再次发生。 后果不限于不承认个人缩写;任何不匹配都会导致pg_timezone_abbrevs 视图完全失败。

  • 将时区数据文件更新为tzdata release 2016h, 用于巴勒斯坦和土耳其的DST法律变更,以及对土耳其和俄罗斯一些地区的历史更正。 切换到南极洲、前苏联和斯里兰卡的一些时区的数字缩写。

    IANA时区数据库以前为所有时区提供了文本缩写, 有时会提供当地人口中流通很少或没有流通的缩写。他们正在推翻该政策, 赞成在没有现实世界中使用英文缩写的地区使用数字UTC偏移量。至少目前来说, PostgreSQL将继续接受此类删除的时间戳输入缩写。 但它们不会显示在pg_timezone_names视图中,也不会用于输出。

    在此更新中,AMT不再显示为用于表示亚美尼亚时间。因此, 我们已将Default缩写集更改为将其解释为Amazon Time, 因此是UTC-4而不是UTC+4。