翻译:doudou586 ... 新闻稿采编:2019-03-02 09:44:19+08

软件发布:2019-02-14

PostgreSQL 11.2、10.7、9.6.12、9.5.16 和 9.4.21发布!

2019-02-14,PostgreSQL全球开发小组发布了所有支持的数据库系统的版本更新,包括11.2、10.7、9.6.12、9.5.16 和 9.4.21版本。此次版本改变了PostgreSQL与系统函数fsync()的交互处理方式,修正了分区表的功能,以及用户近三个月所上报的超过70个Bug。

建议用户在下次的规划停机时,对系统进行升级。

重点提示: 对fsync()系统内核函数交互方式的改变

缺省配置下,如果操作系统有fsync()函数并且配置为可以使用的情况下,PostgreSQL会使用此函数来帮助确保数据写入磁盘。在一些提供fsync()函数的操作系统中,当系统在不能写入数据时,它会返回失败标志并且从它的数据缓冲区中清除应写入磁盘的数据。

在这种情况下,这个清除的操作对PostgreSQL有一个不好的副作用:如果PostgreSQL通过再次调用fsync()函数,试着再次写入数据,此时fsync()会报告写入成功,但PostgreSQL认为应存入磁盘的数据实际上并未写入磁盘。这样就会造成数据损坏的结果。

本次更新修改了PostgreSQL处理fsync()返回失败标识的方式:PostgreSQL将不再调用fsync()函数,而是发出PANIC级的报警。在这种情况下,PostgreSQL也可以从WAL日志中重新加载数据来帮助确保数据写入磁盘。 这种处理方式看起来不是最佳的解决方案,不过根据反馈报告,这个问题的发生也是极其少见的。

现在系统中增加一个新的服务器参数data_sync_retry来配置新的处理方式。如果用户确认操作系统在此种场景下不会清理脏数据,用户可以设置data_sync_retry为on来保持以前的处理方式。

BUG修正和改进

本次更新也引入了有关发布声明如何组织的变更。对本次更新,所有仍在支持的版本将仅含有当前大版本有关的发布内容。比如PostgreSQL 11的发布声明将仅包含11.2,11.1和11.0有关的内容。对不再支持的版本(如PostgreSQL 9.3及更早的版本)的发布声明,也会在即将上线的PostgreSQL网站归档文件中可以找到。

本次更新修正了近几个月所上报的Bug。部分Bug仅影响11版本,但大部分都对目前在支持的版本有影响。

这些修正包括:

  • 修正分区表中包含INCLUDE选项的唯一索引中的问题;
  • 确保分区表中NOT NULL的约束在其所属的分区中产生作用;
  • 几处有关分区表约束的修正;
  • 修正在对分区表或是继承表在应用ON COMMIT DROP 和ON COMMIT DELETE ROWS 操作时产生的问题;
  • 禁止COPY FREEZE应用于分区表;
  • 几处有关ALTER TABLE .. ADD COLUMN 在带有非空的缺省值定义的修正,包括可能的索引出错;
  • 几处有关GIN索引的修正,包括避免VACUUM和并发索引可能产生的死锁;
  • 修正在使用表达式索引和断言的逻辑复制时可能产生的宕机问题;
  • 几处有关WAL日志的修正;
  • 修正在UPDATE中含有多个SET选项的子查询场景下可能造成的宕机现象;
  • 修正当没有数据提交给json[b]_populate_recordset() 或是 json[b]_to_recordset() 函数时可能造成的宕机;
  • 几处有关字符集处理的修正,包括在CALL调用时使用与字符集相关表达式的参数解析处理;
  • 几处有关查询规划器的修正,包括对处理较大的继承表和分区表的规划速度的提升;
  • 几处对TRUNCATE操作处理;
  • 确保ALTER TABLE ONLY ADD COLUMN IF NOT EXISTS正确地处理;
  • 允许对热备模式的UNLISTEN操作;
  • 修正在pg_hba.conf参数文件中,对LDAP授权有关的按空格区隔主机名的列表解析处理;
  • 几处对ecpg模块的修正;
  • 几处对psql的修正,包括使用COPY TO STDOUT 时增加\g target 选项;
  • 现在对pgbench指定--random-seed=N选项后,随机数的生成是平台独立并且结果是可确定的;
  • 修正pg_basebackup 和 pg_verify_checksums指令处理中的问题,来适当地忽略临时文件;
  • 几处有关pg_dump的修正,包括对含ALTER INDEX SET STATISTICS指令的处理;
  • 防止contrib/amcheck模块中,因在线数据压缩时可能造成的错误索引报警;
  • 支持新的Makefile变量来帮助编译扩展模块;

本次更新也包含2018i版本的时区数据,包括哈萨克斯坦、梅特拉卡特拉、圣多美和普林西比时区的更新。哈萨克斯坦的克孜勒奥尔达区现分为两部分,因此系统中也增加了一个新区Asia/Qostanay,加上对中国香港和一些太平洋岛屿历史数据的更新。

系统更新

所有PostgreSQL的更新版本是累进方式的。对一般小版本的更新,并不需要用户对数据进行导出和导入或是使用pg_upgrade进行更新,只需要停止PostgreSQL服务,更新一下服务器的二进制文件即可。

用户跳过了一个或是多个补丁版本可能也需要额外的后续操作,请浏览详细的发布说明来检查更早版本升级的细节。

PostgreSQL 9.4版本将会在2020年2月13号以后不再进行更新,请浏览以下的版本策略了解更多信息。

相关链接

© 2010 PostgreSQL中文社区