E.11. 版本 9.5.15 #
发布日期:. 2018-11-08
此版本包含自 9.5.14 以来的多种修复。有关 9.5 大版本中新特性的信息,参见第 E.26 节。
E.11.2. 变更
修复
has_函数族的边界失败(Tom Lane)foo_privilege()提供无效对象 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/ltree和contrib/pg_trgm。确保外部表拥有的序列由该表上的
ALTER OWNER处理(Peter Eisentraut)所有权更改应当也传播到这种序列,但外部表的情况被遗漏了。
确保服务器在等待客户端输入之前处理已收到的
NOTIFY和SIGTERM中断(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()等函数时的错误行为。修复 WAL 文件回收逻辑在备库服务器上正确工作(Michael Paquier)
根据
archive_mode的设置,备库可能无法移除一些本可以移除的 WAL 文件。修复恢复期间提交时间戳追踪的处理(Masahiko Sawada、Michael Paquier)
如果提交时间戳追踪曾被打开或关闭,恢复可能因为试图获取未记录提交时间戳的事务的提交时间戳而失败。
在 bootstrap 和独立后端以及 initdb 中随机化
random()的种子(Noah Misch)这一更改的主要实际效果是避免一种场景:initdb 因总是使用相同的随机种子导致的名称冲突,而错误地断定 POSIX 共享内存不可用。
允许 DSM 分配被中断(Chris Travers)
正确处理动态打开
full_page_writes(Kyotaro Horiguchi)避免从 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)
服务
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/unaccent的unaccent()函数使用与该函数同模式中的unaccent文本搜索词典(Tom Lane)此前它尝试用搜索路径查找词典,如果搜索路径是受限值就可能失败。
修复 macOS 10.14(Mojave)上的构建问题(Tom Lane)
调整 configure 向
CPPFLAGS添加-isysroot开关;没有它,PL/Perl 和 PL/Tcl 在 macOS 10.14 上无法配置或构建。所用的具体 sysroot 可以在配置或构建时通过在 configure 或 make 的参数中设置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 现在在启动时放弃任何此类权限。
支持在 Windows 上使用 Visual Studio 2015 或 Visual Studio 2017 构建(Michael Paquier、Haribabu Kommi)
允许 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 的函数调用另一个时可能的干扰。
在向后分支中提供
ALLOCSET_DEFAULT_SIZES及同级宏(Tom Lane)这些宏自 9.6 起就已存在,但有请求把它们添加到较旧的分支,以便扩展无需针对分支编写特定代码即可依赖它们。
避免使用可能未充分对齐的页缓冲区(Tom Lane)
发明了新的联合类型
PGAlignedBlock和PGAlignedXLogBlock,并用它们代替普通的 char 数组,确保编译器不能把缓冲区放在未对齐的起始地址。这修复了对齐挑剔平台上可能的核心转储,并且即使在允许未对齐的平台上也可能改进性能。使
src/port/snprintf.c遵循 C99 标准对snprintf()结果值的定义(Tom Lane)在使用此代码的平台(主要是 Windows)上,其前 C99 行为可能导致无法检测缓冲区越界(如果调用代码假定 C99 语义)。
在 i386 上用 clang 编译器构建时,要求使用
-msse2(Andres Freund)这避免了浮点溢出检查遗漏的问题。
修复 configure 对
strerror_r()结果类型的检测(Tom Lane)原来的编码在 Linux 上用 icc 构建时(或许其他情况下)得到错误答案,导致 libpq 不能为系统报告的错误返回有用的错误消息。
更新时区数据文件到 tzdata 版本 2018g,涉及智利、斐济、摩洛哥和俄罗斯(伏尔加格勒)的夏令时法规变更,以及中国、夏威夷、日本、澳门和朝鲜的历史修正。