翻译:doudou586 ... 新闻稿采编:2018-05-13 23:41:55+08

软件发布:2018-05-10

2018-05-10,​​PostgreSQL全球开发小组发布了所有支持的数据库系统的版本更新,包括10.4,9.6.9,9.5.13,9.4.18和9.3.23版本。 此次的版本发布是解决一个安全问题以及用户近三个所上报的Bug。用户应计划在下一次停机时进行系统升级。

请浏览"系统更新"段落来了解在安装后,应执行的步骤来对安全漏洞以及“不正确的函数非稳态和并行安全标记”的问题的修正。

请注意,PostgreSQL自10.0版本以后,采用了新的版本策略,所以从10.0,10.1,10.2,10.3向10.4升级只算是一个微小的版本升级。

安全问题

这个版本中一个安装漏洞已被修正:

CVE-2018-1115: 在pg_logfile_rotate()函数中有过于宽松的权限控制

请浏览以下的“系统更新”段落了解安装后应执行的步骤。

BUG修正和改进

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

这些修正包括:

  • 在几个内置函数中修正“不正确的函数非稳态和并行安全标记”的问题,以确保正确的查询优化;
  • 几处有关分区的修正,包括潜在的宕机以及允许布尔值TRUE 和 FALSE 作为分区边界;
  • 修正当一条记录值可以标记为dead-but-not-yet-vacuumed(已呆死但还未清除)的 TOAST OID,这样会导致类似“unexpected chunk number 0 (expected 1) for toast value nnnnn"的错误提示;
  • 修正"CREATE TABLE … LIKE"在32位平台上使用bigint identity 列的问题;
  • 修正一个查询在重复执行hash join时的内存泄漏;
  • 几处使用GROUPING SET的查询可能引起宕机的问题;
  • 在提交一个预处理的事务时,避免当一个”查询取消“或是”会话强制终止“的中断导致的问题;
  • 在autovacuum自动清理进程的计划中减少锁定,以防止潜在的进程并发操作的失效;
  • 修正可能的REFRESH MATERIALIZED VIEW CONCURRENTLY (并发刷新物化视图)的低效执行;
  • 几处使用"index-only"扫描的查询规划更新;
  • 在使用SERIALIZABLE或是REPEATABLE READ的事务模式下并发执行CREATE INDEX CONCURRENTLY指令时的更新,以避免死锁的发生;
  • 几处对SP-GiST 索引的修正,包括TEXT字段列的搜索时的内码自适应;
  • 修正几处有关GiST, SP-GiST 和 Bloom 索引的分区表对记录记数的处理;
  • 几处有关逻辑解码和复制的更新;
  • 修正在导出时,几处对使用列表值类型的GUC变量的不合适的引用,包括local_preload_libraries, session_preload_libraries, shared_preload_libraries, temp_tabl espaces;
  • 几处对 pg_stat_activity的更新;
  • 几处对ecpg的更新;
  • 修正pg_recvlogical,以保证与PostgreSQL 10以下版本的兼容性;
  • 几处有关pg_rewind的更新;

本次更新也包含2018d版本的时区数据,包括对Palestine 和Antarctica时区的更新,加上对Portugal及其殖民属地历史数据的更新,也包括Enderbury, Jamaica, Turks & Caicos Islands 和Uruguay。

系统更新

所有PostgreSQL的更新版本是累进方式的。对一般小版本的更新,并不需要用户对数据进行导出和导入或是使用pg_upgrade进行更新(不过对这次更新,用户需要浏览下面有关"volatility 和 parallel-safety 函数标记的段落操作"),只需要停止PostgreSQL服务,更新一下服务器的二进制文件即可。

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

安装后处理CVE-2018-1115问题的步骤

如果你在PostgreSQL 9.6或是10版本安装了"adminpack"扩展,你需要使用数据库管理员的权限在所有安装了“adminpack”扩展的数据库,运行以下指令:

ALTER EXTENSION adminpack UPDATE;

安装后对 MARKINGS 功能的处理步骤

应标记为"volatile"状态的函数

  • cursor_to_xml
  • cursor_to_xmlschema
  • query_to_xml
  • query_to_xml_and_xmlschema
  • query_to_xmlschema

应标记为"parallel-unsafe"状态的函数

  • binary_upgrade_create_empty_extension
  • brin_desummarize_range
  • brin_summarize_new_values
  • brin_summarize_range
  • cursor_to_xml
  • cursor_to_xmlschema
  • gin_clean_pending_list
  • pg_import_system_collations
  • ts_rewrite
  • ts_stat

如你使用上述任何函数,你需要按下述方法更新他们的标记状态:

  • 方法1: 在每一个数据库中的pg_proc表中,手工在更新函数的标记内容。你可以使用数据库管理员权限,通过执行以内容实现目的:
/* 应标记为 "volatile" 状态的函数 */
ALTER FUNCTION pg_catalog.cursor_to_xml(refcursor, int, boolean, boolean, text) VOLATILE;
ALTER FUNCTION pg_catalog.cursor_to_xmlschema(refcursor, boolean, boolean, text) VOLATILE;
ALTER FUNCTION pg_catalog.query_to_xml(text, boolean, boolean, text) VOLATILE;
ALTER FUNCTION pg_catalog.query_to_xml_and_xmlschema(text, boolean, boolean, text) VOLATILE;
ALTER FUNCTION pg_catalog.query_to_xmlschema(text, boolean, boolean, text) VOLATILE;

/* 应标记为 "parallel-unsafe" 状态的函数 */
ALTER FUNCTION pg_catalog.binary_upgrade_create_empty_extension(text, text, bool, text,
                                                   _oid, _text, _text) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.brin_desummarize_range(regclass, bigint) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.brin_summarize_new_values(regclass) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.brin_summarize_range(regclass, bigint) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.cursor_to_xml(refcursor, int, boolean, boolean, text) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.cursor_to_xmlschema(refcursor, boolean, boolean, text) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.gin_clean_pending_list(regclass) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.pg_import_system_collations(regnamespace) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.ts_rewrite(tsquery, text) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.ts_stat(text) PARALLEL UNSAFE;
ALTER FUNCTION pg_catalog.ts_stat(text, text) PARALLEL UNSAFE;
  • 方法2 : 运行pg_upgrade至一个含有标记更新的版本(比如10.4版本或以上)。

相关链接

© 2010 PostgreSQL中文社区