选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 9.6
历史版本PostgreSQL 9.6 已于 2021 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页

E.14. 版本 9.6.11 #

发布日期:. 2018-11-08

此版本包含自 9.6.10 以来的多种修复。 有关 9.6 大版本中新特性的信息,参见 第 E.25 节

E.14.1. 迁移到版本 9.6.11

对于运行 9.6.X 的用户,不需要转储/恢复。

不过,如果你是从 9.6.9 之前的版本升级,参见 第 E.16 节

E.14.2. 变更

  • 修复 has_foo_privilege() 函数族的边界失败(Tom Lane)

    提供无效对象 OID 时返回 NULL 而不是抛出错误。其中一些函数本来就做对了, 但并非全部。has_column_privilege() 在某些平台上 还可能崩溃。

  • 避免正则表达式匹配/拆分函数在长字符串上的 O(N^2) 减速 (Andrew Gierth)

  • 修复紧随注释或 +- 之后的标准 多字符操作符的解析(Andrew Gierth)

    这一疏漏可能导致解析错误或优先级的不正确分配。

  • 避免词法分析器对长串 +- 字符 的 O(N^3) 减速(Andrew Gierth)

  • 修复外层查询被反向扫描时 SubPlan 的错误执行(Andrew Gierth)

  • 修复回卷所引用游标后 UPDATE/DELETE ... WHERE CURRENT OF ... 的失败(Tom Lane)

    扫描多个关系(特别是继承树)的游标如果被回卷到较早的关系,可能产生 错误行为。

  • 修复 EvalPlanQual 正确处理条件执行的 InitPlan (Andrew Gierth、Tom Lane)

    如果并发更新包含诸如 CASE 构造内的不相关子 SELECT 之类的代码,这会导致难以重现的崩溃或错误 答案。

  • 修复字符类检查在 Windows 上对 U+FFFF 以上的 Unicode 字符不再失败 (Tom Lane、Kenji Uno)

    此 bug 影响全文搜索操作以及 contrib/ltreecontrib/pg_trgm

  • 禁止把包含窗口函数、LIMITOFFSET 的子 SELECT 下推给并行工作者(Amit Kapila)

    由于行序变化导致的不确定性,不同工作者可能得到不同答案,这类情况可能 导致行为不一致。

  • 确保外部表拥有的序列由该表上的 ALTER OWNER 处理 (Peter Eisentraut)

    所有权更改应当也传播到这种序列,但外部表的情况被遗漏了。

  • 确保服务器在等待客户端输入之前处理已收到的 NOTIFYSIGTERM 中断(Jeff Janes、Tom Lane)

  • 修复 array_out() 结果字符串的空间过度分配 (Keiichi Hirobe)

  • 修复重复 SP-GiST 索引扫描中的内存泄漏(Tom Lane)

    目前已知只有当使用 SP-GiST 的排他约束在单条命令中接收许多新索引条目时, 这才会达到显著程度。

  • 确保 ApplyLogicalMappingFile() 用完后关闭映射文件 (Tomas Vondra)

    此前文件描述符被泄漏,最终导致逻辑解码期间的失败。

  • 修复逻辑解码处理被映射目录表被反复重写(例如被 VACUUM FULL) 的情况(Andres Freund)

  • 防止以低到无法支持现有复制槽的 wal_level 启动服务器 (Andres Freund)

  • 避免实用命令导致无限递归时崩溃(Tom Lane)

  • 初始化热备时,应对由主库两阶段事务引起的重复 XID (Michael Paquier、Konstantin Knizhnik)

  • 修复事件触发器处理嵌套 ALTER TABLE 命令 (Michael Paquier、Álvaro Herrera)

  • 把父进程的事务和语句开始时间戳传播给并行工作者 (Konstantin Knizhnik)

    这防止工作者中执行 transaction_timestamp() 等函数 时的错误行为。

  • 修复展开数据传给并行工作者时保持对齐,防止在对齐挑剔的平台上的崩溃 (Tom Lane、Amit Kapila)

  • 修复 WAL 文件回收逻辑在备库服务器上正确工作(Michael Paquier)

    根据 archive_mode 的设置,备库可能无法移除一些本可以 移除的 WAL 文件。

  • 修复恢复期间提交时间戳追踪的处理 (Masahiko Sawada、Michael Paquier)

    如果提交时间戳追踪曾被打开或关闭,恢复可能因为试图获取未记录提交时间 戳的事务的提交时间戳而失败。

  • 在 bootstrap 和独立后端以及 initdb 中随机化 random() 的种子(Noah Misch)

    这一更改的主要实际效果是避免一种场景:initdb 因总是使用相同的随机种子导致的名称冲突,而错误地断定 POSIX 共享 内存不可用。

  • 允许 DSM 分配被中断(Chris Travers)

  • 避免并行工作者加载试图在其 init 函数中访问系统缓存的扩展时失败 (Thomas Munro)

    我们不认为那是好的扩展编码实践,但在并行查询出现之前它大多能工作, 因此暂时继续支持。

  • 正确处理动态打开 full_page_writes(Kyotaro Horiguchi)

  • 修复 SP-GiST 重扫描期间因双重 free() 可能的崩溃 (Andrew Gierth)

  • 避免从 WAL 重放 GIN 页重压缩时可能的缓冲区越界 (Alexander Korotkov、Sivasubramanian Ramasubramanian)

  • 修复遗漏的对复制槽目录的 fsync(Konstantin Knizhnik、Michael Paquier)

  • 避免在缓慢的服务器上使用 wal_sender_timeout 时的意外 超时(Noah Misch)

  • 确保热备进程使用正确的 WAL 一致点 (Alexander Kukushkin、Michael Paquier)

    这防止备库服务器在 WAL 重放期间刚达到一致数据库状态之后可能的行为 异常。

  • 确保 postmaster 在完成数据库启动之前收到快速关闭请求时正确停止后台 工作者(Alexander Kukushkin)

  • 在 WAL 重放页全可见/冻结标志更改期间更新空闲空间映射 (Álvaro Herrera)

    此前我们没有认真对待这一点,理由是 FSM 反正不是关键数据。但如果它 过时得厉害,备库被提升为主库后会导致显著的性能退化。FSM 最终会被 更新治愈,但我们希望它更快变好,因此在 WAL 重放期间更努力地维护 它。

  • 避免到达查询结束或元组数限制时过早释放并行查询资源(Amit Kapila)

    只有当调用者之后不可能要求反向扫描时,才可以在这时关闭执行器。

  • 服务 SIGQUIT 时不运行 atexit 回调 (Heikki Linnakangas)

  • 不要把外部服务器用户映射记录为扩展的成员(Tom Lane)

    如果在扩展脚本中执行 CREATE USER MAPPING,会为用户 映射创建扩展依赖,这是意料之外的。角色不能是扩展成员,因此用户映射 也不应该是。

  • 让 syslogger 更能抵御打开 CSV 日志文件的失败(Tom Lane)

  • 修复 psql 以及文档示例,在每次调用 PQnotifies() 之前先调用 PQconsumeInput()(Tom Lane)

    这修复了 psql 直到下一条命令之后才报告收到 NOTIFY 消息的情况。

  • 修复 pg_dump 对不相似对象名排序可能的 不一致(Jacob Champion)

  • 确保 pg_restore 发出 DISABLE/ENABLE TRIGGER 命令时 对表名进行模式限定(Tom Lane)

    这避免了以受限搜索路径运行恢复的新策略导致的失败。

  • 修复 pg_upgrade 正确处理扩展中的事件触发器 (Haribabu Kommi)

    pg_upgrade 未能保留事件触发器的扩展成员 身份。

  • 修复 pg_upgrade 的集簇状态检查在备库服务器 上正确工作(Bruce Momjian)

  • 在所有 contrib/cube 函数中强制执行 cube 类型的维度限制(Andrey Borodin)

    此前某些与 cube 相关的函数可以构造出会被 cube_in() 拒绝的值,导致转储/恢复失败。

  • contrib/postgres_fdw 中,不要试图把不含变量的 ORDER BY 子句传给远程服务器(Andrew Gierth)

  • 修复 contrib/unaccentunaccent() 函数使用与该函数同模式中的 unaccent 文本搜索 词典(Tom Lane)

    此前它尝试用搜索路径查找词典,如果搜索路径是受限值就可能失败。

  • 修复 macOS 10.14(Mojave)上的构建问题(Tom Lane)

    调整 configureCPPFLAGS 添加 -isysroot 开关;没有它,PL/Perl 和 PL/Tcl 在 macOS 10.14 上无法配置或构建。所用的具体 sysroot 可以在配置或构建时 通过在 configuremake 的参数中设置 PG_SYSROOT 变量来覆盖。

    现在建议与 Perl 相关的扩展在其编译器标志中写 $(perl_includespec) 而不是 -I$(perl_archlibexp)/CORE。后者在大多数平台上继续 有效,但在最近的 macOS 上不行。

    此外,在最近的 macOS 版本上构建 PL/Tcl 应该不再需要手动指定 --with-tclconfig

  • 修复 MSVC 构建和回归测试脚本在最近的 Perl 版本上工作 (Andrew Dunstan)

    Perl 不再默认在搜索路径中包含当前目录;绕过这一点。

  • 在 Windows 上,允许由管理员账户运行回归测试(Andrew Dunstan)

    为了安全地做到这一点,pg_regress 现在在启动时 放弃任何此类权限。

  • 允许 btree 比较函数返回 INT_MIN(Tom Lane)

    到目前为止,我们禁止数据类型相关的比较函数返回 INT_MIN, 这允许调用者只需对比较结果取反即可颠倒排序顺序。然而,对于直接返回 memcmp()strcmp() 等结果 的比较函数,这从来都不安全,因为 POSIX 没有对这些函数施加任何此类 限制。至少某些最近版本的 memcmp() 可以返回 INT_MIN,导致错误的排序。因此我们移除了这一限制。 调用者现在如果想颠倒排序顺序,必须使用 INVERT_COMPARE_RESULT() 宏。

  • 修复共享失效消息处理中的递归风险(Tom Lane)

    这个错误可能导致例如无法访问刚被 VACUUM FULL 处理过 的系统目录或索引。

    这一更改给 LockAcquire 添加了新的结果码,可能影响该 函数的外部调用者,尽管只有非常不寻常的使用模式才会有问题。 LockAcquireExtended 的 API 也有更改。

  • SPI_connect()SPI_finish() 期间保存和恢复 SPI 的全局变量(Chapman Flack、Tom Lane)

    这防止一个使用 SPI 的函数调用另一个时可能的干扰。

  • 避免使用可能未充分对齐的页缓冲区(Tom Lane)

    发明了新的联合类型 PGAlignedBlockPGAlignedXLogBlock,并用它们代替普通的 char 数组,确保 编译器不能把缓冲区放在未对齐的起始地址。这修复了对齐挑剔平台上 可能的核心转储,并且即使在允许未对齐的平台上也可能改进性能。

  • 使 src/port/snprintf.c 遵循 C99 标准对 snprintf() 结果值的定义(Tom Lane)

    在使用此代码的平台(主要是 Windows)上,其前 C99 行为可能导致无法检测 缓冲区越界(如果调用代码假定 C99 语义)。

  • 在 i386 上用 clang 编译器构建时,要求使用 -msse2(Andres Freund)

    这避免了浮点溢出检查遗漏的问题。

  • 修复 configurestrerror_r() 结果类型的检测(Tom Lane)

    原来的编码在 Linux 上用 icc 构建时(或许其他 情况下)得到错误答案,导致 libpq 不能为 系统报告的错误返回有用的错误消息。

  • 更新时区数据文件到 tzdata 版本 2018g,涉及 智利、斐济、摩洛哥和俄罗斯(伏尔加格勒)的夏令时法规变更,以及中国、 夏威夷、日本、澳门和朝鲜的历史修正。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。