pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布日期:. 2018-05-10
此版本包含自 9.6.8 以来的多种修复。 有关 9.6 大版本中新特性的信息,参见 第 E.25 节。
对于运行 9.6.X 的用户,不需要转储/恢复。
不过,如果你使用 adminpack 扩展,应当按照下面第一条 变更日志条目更新它。
另外,如果下面第二和第三条变更日志条目提到的函数标记错误影响到你, 你需要采取措施修正数据库目录。
另外,如果你是从 9.6.8 之前的版本升级,参见 第 E.17 节。
移除 contrib/adminpack 的 pg_logfile_rotate() 函数上的公共执行权限 (Stephen Frost)
pg_logfile_rotate() 是核心函数 pg_rotate_logfile() 的已弃用包装。当核心函数被 改为依靠 SQL 权限而非硬编码的超级用户检查进行访问控制时, pg_logfile_rotate() 本应同步更新,但这一需要 被遗漏了。因此,如果安装了 adminpack,任何 用户都可以请求日志文件轮转,构成一个轻微的安全问题。
安装此更新后,管理员应当通过在每个安装了 adminpack 的数据库中执行 ALTER EXTENSION adminpack UPDATE 来 更新 adminpack。(CVE-2018-1115)
修复少数内建函数上不正确的易变性标记(Thomas Munro、Tom Lane)
函数 query_to_xml、 cursor_to_xml、 cursor_to_xmlschema、 query_to_xmlschema 和 query_to_xml_and_xmlschema 应标记为 volatile, 因为它们执行可能包含易变操作的用户提供的查询。它们没有被这样 标记,导致错误查询优化的风险。新安装已通过更正初始目录数据修复, 但现有安装将继续包含错误标记。实际使用这些函数似乎危害不大,但如 遇到麻烦,可以手动更新这些函数的 pg_proc 条目来修复,例如 ALTER FUNCTION pg_catalog.query_to_xml(text, boolean, boolean, text) VOLATILE。 (注意安装中的每个数据库都需要这样做。)另一个选择是把数据库 pg_upgrade 到包含更正后初始数据的版本。
修复少数内建函数上不正确的并行安全性标记(Thomas Munro、Tom Lane)
函数 brin_summarize_new_values、 gin_clean_pending_list、 cursor_to_xml、 cursor_to_xmlschema、 ts_rewrite、ts_stat 和 binary_upgrade_create_empty_extension 应标记 为并行不安全;一些是因为它们直接进行数据库修改,另一些是因为它们 执行可能这样做的用户提供查询。它们被标记成了并行受限,导致意外 查询错误的风险。新安装已通过更正初始目录数据修复,但现有安装将 继续包含错误标记。除非打开 force_parallel_mode,实际使用这些函数似乎危害 不大。如遇到麻烦,可以手动更新这些函数的 pg_proc 条目来修复,例如 ALTER FUNCTION pg_catalog.brin_summarize_new_values(regclass) PARALLEL UNSAFE。 (注意安装中的每个数据库都需要这样做。)另一个选择是把数据库 pg_upgrade 到包含更正后初始数据的版本。
避免重用与已死但尚未清理的 TOAST 条目匹配的 TOAST 值 OID (Pavan Deolasee)
一旦 OID 计数器回卷,就可能分配一个 OID 与同一 TOAST 表中先前删除的 条目匹配的 TOAST 值。如果该条目尚未被清理,就会导致 “unexpected chunk number 0 (expected 1) for toast value nnnnn” 错误,并持续到 VACUUM 移除死条目为止。修复方法是创建新 TOAST 条目时不选择这种 OID。
更改 ANALYZE 更新 pg_class.reltuples 的算法(David Gould)
此前,ANALYZE 未实际扫描的页被假定保留其旧的元组 密度。在 ANALYZE 只采样很少一部分页的大表中,这 意味着总体元组密度估计不会有太大变化,因此无论表中实际发生什么, reltuples 都几乎与表物理大小 (relpages)的变化成比例地变化。据观察, 这会导致 reltuples 远大于实际值,以致 实际上关闭了自动清理。为修复,假定 ANALYZE 的 样本是表的无偏统计样本(本应如此),直接把这些页中观察到的密度 外推到整表。
避免在 SERIALIZABLE 或 REPEATABLE READ 事务隔离下运行的并发 CREATE INDEX CONCURRENTLY 命令中的死锁(Tom Lane)
修复 REFRESH MATERIALIZED VIEW CONCURRENTLY 可能 缓慢的执行(Thomas Munro)
修复 UPDATE/DELETE ... WHERE CURRENT OF 在所引用 游标使用仅索引扫描计划时不失败(Yugo Nagata、Tom Lane)
修复下推到参数化路径的连接子句的错误规划(Andrew Gierth、Tom Lane)
这个错误可能把本应是普通“过滤”条件的条件错误分类为外连接 的“连接过滤”,导致错误的连接输出。
修复同一表列出现在多个索引列中,且只有部分索引列使用能返回该列值的 操作符类时,仅索引扫描计划可能不正确的生成 (Kyotaro Horiguchi)
修复对顶层 AND/OR 条件带有可证明 为 NULL 子子句的 CHECK 约束的错误优化 (Tom Lane、Dean Rasheed)
这可能导致例如约束排除错误地排除不应从查询中排除的子表。
修复某些 GROUPING SET 用法中因双重释放导致的执行器 崩溃(Peter Geoghegan)
避免可能与能调用此类触发器的命令并发添加表重写事件触发器时崩溃 (Álvaro Herrera、Andrew Gierth、Tom Lane)
避免提交预备事务时发生查询取消或会话终止中断时失败(Stas Kelvich)
修复重复执行的哈希连接中的查询生命周期内存泄漏(Tom Lane)
修复可见性映射缓冲区 pin 可能的泄漏或双重释放(Amit Kapila)
避免虚假地把页标记为全可见(Dan Wood、Pavan Deolasee、 Álvaro Herrera)
如果某些元组被锁定(但未被删除)就可能发生这种情况。虽然查询仍能正确 运行,但 vacuum 通常会忽略这种页,长期效果是这些元组永远不会被 冻结。在最近的版本中,这最终会导致诸如 “found multixact nnnnn from before relminmxid nnnnn” 的错误。
修复 heap_prepare_freeze_tuple 中过于严格的健全 性检查(Álvaro Herrera)
在从 9.2 或更早版本 pg_upgrade 过来的数据库 中,这可能导致错误的 “cannot freeze committed xmax” 失败。
防止 C 编写的 before-update 行触发器返回“旧”元组时的悬空 指针解引用(Rushabh Lathia)
减少自动清理工作者调度期间的锁定(Jeff Janes)
原来的行为导致有许多表的数据库中潜在工作者并发性的急剧丧失。
确保把 pg_stat_activity 数据复制到本地内存时 复制客户端主机名(Edmund Horner)
此前,这个本应本地的快照包含指向共享内存的指针,使客户端主机名列可能 因任何现有会话断开而意外改变。
修复 ispell 词典中多个复合词缀的错误处理 (Arthur Zakirov)
修复 text 列上 SP-GiST 索引中的排序规则感知搜索(即使用不等操作符的 索引扫描)(Tom Lane)
在大多数非 C 区域中,这种搜索会返回错误的行集合。
防止使用遍历值的 SP-GiST 操作符类的查询生命周期内存泄漏 (Anton Dignös)
在 SP-GiST 索引初始构建期间正确计数索引元组数(Tomas Vondra)
此前,元组数被报告为与底层表相同,如果索引是部分索引就错了。
在 GiST 索引清理期间正确计数索引元组数(Andrey Borodin)
此前它报告的是估计的堆元组数,可能不准确,而且如果索引是部分索引则 肯定错误。
修复流式备库在 WAL 延续记录处卡住的一个边界情况 (Kyotaro Horiguchi)
在逻辑解码中,避免 walsender 重启时 WAL 数据可能被双重处理 (Craig Ringer)
允许 scalarltsel 和 scalargtsel 用于非核心数据类型(Tomas Vondra)
减少收集了大量查询输出之后服务器报告错误时 libpq 的内存消耗(Tom Lane)
在处理错误消息之前而不是之后丢弃先前的输出。在某些平台(特别是 Linux)上,这可以改变应用之后的内存占用。
修复 ecpg 中的双重释放崩溃 (Patrick Krecker、Jeevan Ladhe)
修复 ecpg 在 MSVC 构建中正确处理 long long int 变量(Michael Meskes、Andrew Gierth)
修复转储中列表值 GUC 变量值的错误引号 (Michael Paquier、Tom Lane)
local_preload_libraries、 session_preload_libraries、 shared_preload_libraries 和 temp_tablespaces 变量在 pg_dump 输出中没有正确加引号。如果这些 变量的设置出现在 CREATE FUNCTION ... SET 或 ALTER DATABASE/ROLE ... SET 子句中,这会导致 问题。
修复 pg_recvlogical 对 v10 之前的 PostgreSQL 服务器不失败的问题 (Michael Paquier)
此前的一次修复使 pg_recvlogical 不论服务器 版本都发出一条命令,但它只应对 v10 及之后的服务器发出。
确保 pg_rewind 删除目标服务器上在运行期间 从源服务器上删除的文件(Takayuki Tsunakawa)
不这样做可能导致目标上的数据不一致,特别是当相关文件是 WAL 段时。
修复 pg_rewind 正确处理非默认表空间中的表 (Takayuki Tsunakawa)
修复 PL/pgSQL 整数 FOR 循环中的溢出处理(Tom Lane)
原来的编码在一些非 gcc 编译器上未能检测到循环变量的溢出,导致无限 循环。
调整 PL/Python 回归测试在 Python 3.7 下通过 (Peter Eisentraut)
支持用 Python 3 和 MSVC 构建时测试 PL/Python 及相关模块(Andrew Dunstan)
修复 contrib/bloom 索引初始构建中的错误 (Tomas Vondra、Tom Lane)
修复索引可能遗漏表最后一个元组的问题。正确计数索引元组数,以防它是 部分索引。
重命名内部 b64_encode 和 b64_decode 函数,避免与 Solaris 11.4 内置 函数冲突(Rainer Orth)
把我们的时区库副本与 IANA tzcode 版本 2018e 同步(Tom Lane)
这修复了 zic 时区数据编译器应对负夏令时 偏移的能力。虽然 PostgreSQL 项目不会 立即发布这种时区数据,但 zic 可能被 用于直接从 IANA 获得的时区数据,因此现在更新 zic 是审慎的。
更新时区数据文件到 tzdata 版本 2018d,涉及 巴勒斯坦和南极洲(凯西站)的夏令时法规变更,以及葡萄牙及其殖民 地、恩德伯里、牙买加、特克斯和凯科斯群岛及乌拉圭的历史修正。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。