E.8.版本 10.6
发布日期: 2018-11-08
此版本包含自 10.5 起的各种修复程序。有关主要版本 10 中新功能的信息,请参阅Section E.14。
E.8.1. 迁移到版本 10.6
运行 10.X 的用户不需要转储/还原。
但是,如果您使用pg_stat_statements
extensions,请参阅下面的更改日志条目。
另外,如果要从 10.4 之前的版本升级,请参见Section E.10。
E.8.2. Changes
- 当 pg_dump 发出
CREATE TRIGGER ... REFERENCING
命令时,确保正确引用过渡表名称(Tom Lane)
非特权用户可以利用这种监督方式在下一次转储/重新加载或 pg_upgrade 运行期间获取超级用户特权。 (CVE-2018-16850)
- 修复
has_foo_privilege()
函数家族(Tom Lane)中的极端情况失败
提供无效的对象 OID 时,返回 NULL 而不是引发错误。其中一些功能已经实现了正确的功能,但不是全部。 has_column_privilege()
还能够在某些平台上崩溃。
-
修复
pg_get_partition_constraintdef()
,以在传递无效关系 OID(Tom Lane)时返回 NULL 而不是失败 -
避免在长字符串的正则表达式匹配/拆分函数中出现 O(N ^ 2)变慢的情况(Andrew Gierth)
-
修复对标准多字符运算符的解析,该解析符后紧跟 Comments 或
+
或-
(Andrew Gierth)
这种疏忽可能导致解析错误,或导致错误的优先级分配。
-
对于
+
或-
字符的长字符串,避免 lexer 中的 O(N ^ 3)减慢(Andrew Gierth) -
修复向后扫描外部查询时 SubPlans 的执行错误(Andrew Gierth)
-
倒回引用的光标(Tom Lane)后修复
UPDATE/DELETE ... WHERE CURRENT OF ...
失败
如果将光标放回较早的关系,则扫描多个关系(尤其是继承树)的游标可能会产生错误的行为。
- 修复
EvalPlanQual
以正确处理有条件执行的 InitPlan(Andrew Gierth,Tom Lane)
如果它们包含诸如CASE
结构中不相关的 subSELECT
之类的代码,则这将导致难以重现的崩溃或并发更新中的错误答案。
- 防止在附加到其父表的触发器中创建分区(Amit Langote)
理想情况下,我们允许这样做,但目前必须将其阻止以避免崩溃。
-
解决将
ON COMMIT DELETE ROWS
应用于分区临时表的问题(Amit Langote) -
修复字符类检查,以确保 Windows 上 U FFFF 以上的 Unicode 字符不会失败(Tom Lane,Kenji Uno)
此错误影响了全文搜索操作以及contrib/ltree
和contrib/pg_trgm
。
- 禁止将包含窗口函数
LIMIT
或OFFSET
的 sub__1 推送给并行工作程序(Amit Kapila)
由于不同的工作人员获得不同的答案,因此这种情况可能导致行为不一致,这是由于行 Sequences 变化导致不确定性的结果。
- 确保外部表拥有的序列由表上的
ALTER OWNER
处理(Peter Eisentraut)
所有权更改也应传播到这样的序列,但是外国表却忽略了这一点。
-
在 awaitClient 端 Importing 之前,请确保服务器将处理已经收到的
NOTIFY
和SIGTERM
中断(杰夫·简斯,汤姆·莱恩) -
修复
array_out()
的结果字符串的空间过度分配(Keiichi Hirobe) -
避免
XMLTABLE
中的查询生命周期内存泄漏(Andrew Gierth) -
修复重复 SP-GiST 索引扫描中的内存泄漏(Tom Lane)
仅在使用 SP-GiST 的排除约束在单个命令中接收到许多新索引条目的情况下,这才有意义。
- 完成后,请确保
ApplyLogicalMappingFile()
关闭 Map 文件(Tomas Vondra)
以前,文件 Descriptors 已泄漏,最终导致逻辑解码期间失败。
-
修复逻辑解码以处理重复重写 Map 的目录表的情况,例如由
VACUUM FULL
(Andres Freund) -
防止将
wal_level
设置为太低的值来启动服务器,以不支持现有的复制插槽(Andres Freund) -
如果 Util 命令导致无限递归,请避免崩溃(Tom Lane)
-
初始化热备用数据库时,应对主数据库上两阶段事务引起的重复 XID(Michael Paquier,Konstantin Knizhnik)
-
修复事件触发器以处理嵌套的
ALTER TABLE
命令(Michael Paquier,ÁlvaroHerrera) -
将父进程的事务和语句开始时间戳传播给并行工作者(Konstantin Knizhnik)
这样可以防止在工作程序中执行transaction_timestamp()
之类的功能时出现异常行为。
-
修复了将展开的基准传输到并行工作程序的问题,从而保留了对齐方式,从而避免了在对齐方式挑剔的平台上崩溃的情况(Tom Lane,Amit Kapila)
-
修复 WAL 文件回收逻辑以在备用服务器上正常工作(Michael Paquier)
根据archive_mode
的设置,备用数据库可能无法删除某些可以删除的 WAL 文件。
- 修复恢复过程中落实时间戳跟踪的处理(泽田正彦,迈克尔·帕奎尔)
如果提交时间戳跟踪已打开或关闭,则恢复可能会由于尝试获取未记录事务的提交时间戳而失败。
- 在引导程序和独立后端以及 initdb 中随机分配
random()
种子(Noah Misch)
此更改的主要实际效果是,它避免了由于始终使用相同的随机种子而导致名称冲突,initdb 可能会错误地推断出 POSIX 共享内存不可用的情况。
-
修复 DSA 逻辑中可能的共享内存损坏(Thomas Munro)
-
允许中断 DSM 分配(Chris Travers)
-
加载尝试访问其 init 函数内的系统缓存的扩展时,请避免并行工作器失败(Thomas Munro)
我们不认为这是好的扩展编码实践,但是它大多数在并行查询之前就起作用了,因此现在 continue 支持它。
-
正确处理动态开启
full_page_writes
的动作(H 口恭太郎) -
修复了在 SP-GiST 重新扫描期间由于双
free()
造成的崩溃(Andrew Gierth) -
防止在基于 ELF 的 BSD 平台以及 HP-UX 和 Solaris(Andrew Gierth,Tom Lane)上 src/port 和 src/common 函数的错误链接
加载到后端地址空间中的共享库可以使用这些功能的后端版本,而不是按预期使用它们自己的副本。由于两组功能的行为并不完全相同,因此会导致失败。
-
从 WAL 重播 GIN 页面重新压缩时,避免可能的缓冲区溢出(Alexander Korotkov,Sivasubramanian Ramasubramanian)
-
当
BLCKSZ
小于默认值时,避免哈希索引的元页溢出(Dilip Kumar) -
修复哈希索引中错过的页面校验和更新(Amit Kapila)
-
修复复制槽目录的 fsync 丢失(Konstantin Knizhnik,Michael Paquier)
-
修复在速度较慢的服务器上使用
wal_sender_timeout
时出现意外超时的问题(Noah Misch) -
确保热备用进程使用正确的 WAL 一致性点(Alexander Kukushkin,Michael Paquier)
这样可以防止在 WAL 重播期间备用服务器达到一致的数据库状态之后可能出现的异常行为。
-
确保邮政局长在完成数据库启动之前收到快速关闭请求时,后台工作人员已正确停止(Alexander Kukushkin)
-
在 WAL 重播页面全可见/冻结标志更改期间更新可用空间 Map(ÁlvaroHerrera)
以前,我们对此并不小心,原因是 FSM 仍然不是关键数据。但是,如果它已过时,则在将备用数据库升级为主数据库后,可能会导致性能显着下降。 FSM 最终将通过更新得到修复,但我们希望它早日成为好事,因此在 WAL 重播期间要更加努力地维护它。
- 当达到查询结束或 Tuples 计数限制时,避免过早释放并行查询资源(Amit Kapila)
如果调用者此后无法要求向后扫描,则可以在此时关闭执行程序。
-
服务
SIGQUIT
时不要运行 atexit 回调(Heikki Linnakangas) -
不要将外部服务器用户 Map 记录为扩展的成员(Tom Lane)
如果在扩展脚本中执行CREATE USER MAPPING
,则会为用户 Map 创建扩展依赖关系,这是意外的。角色不能是扩展成员,因此用户 Map 也不应该是扩展成员。
-
使 syslogger 更加强大,以防打开 CSV 日志文件失败(Tom Lane)
-
当给 libpq 提供多个目标主机名时,一次只进行一次 DNS 查找,而不一次执行一次(Tom Lane)
当成功连接到列表中的较早服务器之一时,这可以防止不必要的故障或连接速度慢。
- 修复 libpq 对连接超时的处理,以便可以按主机名或 IP 地址正确应用它们(Tom Lane)
以前,某些代码路径在切换到新的目标主机时无法重新启动计时器,这可能导致过早的超时。
- 修复 psql 及其文档示例,以在每次
PQnotifies()
调用之前调用PQconsumeInput()
(Tom Lane)
这修复了以下情况:psql 在下一条命令之后才报告收到NOTIFY
消息。
-
修复 pg_dump 的
--no-publications
选项也忽略发布表(Gilles Darold) -
在 pg_dump 中,当其父表从转储中排除时,排除标识序列(David Rowley)
-
修复了 pg_dump 对不同对象名称排序时可能出现的不一致(Jacob Champion)
-
确保发出
DISABLE
/ENABLE TRIGGER
命令时,pg_restore 将对表名进行模式限定(Tom Lane)
这样可以避免由于使用限制性搜索路径运行还原的新策略而导致的失败。
- 修复 pg_upgrade 以正确处理扩展中的事件触发器(Haribabu Kommi)
pg_upgrade 无法保留事件触发器的扩展成员资格状态。
-
修复 pg_upgrade 的集群状态检查以在备用服务器上正常工作(Bruce Momjian)
-
在所有
contrib/cube
函数中强制类型cube
的尺寸限制(Andrey Borodin)
以前,一些与多维数据集相关的函数可以构造将被cube_in()
拒绝的值,从而导致转储/重新加载失败。
- 在
contrib/pg_stat_statements
中,禁止pg_read_all_stats
角色执行pg_stat_statements_reset()
(Haribabu Kommi)
pg_read_all_stats
仅用于授予读取统计信息的权限,而不是对其进行更改,因此此授予是错误的。
为使此更改生效,请在已安装pg_stat_statements
的每个数据库中运行ALTER EXTENSION pg_stat_statements UPDATE
。
-
在
contrib/postgres_fdw
中,请勿尝试将无变量的ORDER BY
子句传送到远程服务器(Andrew Gierth) -
修复
contrib/unaccent
的unaccent()
函数以使用与该函数相同的架构中的unaccent
文本搜索字典(Tom Lane)
以前,它尝试使用搜索路径查找字典,如果搜索路径具有限制性值,则该字典可能会失败。
- 修复 macOS 10.14(Mojave)(Tom Lane)上的构建问题
调整 configure,将-isysroot
开关添加到CPPFLAGS
;否则,PL/Perl 和 PL/Tcl 无法在 macOS 10.14 上进行配置或构建。通过在 configure 或 make 的参数中设置PG_SYSROOT
变量,可以在配置时或构建时覆盖使用的特定 sysroot。
现在建议与 Perl 相关的扩展在其编译器标志中写入$(perl_includespec)
而不是-I$(perl_archlibexp)/CORE
。后者可以 continue 在大多数平台上运行,但不适用于最新的 macOS。
另外,不再需要手动指定--with-tclconfig
来使 PL/Tcl 构建在最新的 macOS 版本上。
- 修复 MSVC 构建和回归测试脚本以在最新的 Perl 版本上运行(Andrew Dunstan)
默认情况下,Perl 不再在其搜索路径中包括当前目录。解决这个问题。
- 在 Windows 上,允许通过 Management 员帐户运行回归测试(Andrew Dunstan)
为了安全地执行此操作,pg_regress 现在在启动时放弃了任何此类特权。
- 允许 btree 比较函数返回
INT_MIN
(Tom Lane)
到目前为止,我们已经禁止返回特定于数据类型的比较函数INT_MIN
,这允许调用者仅通过对比较结果求反就可以反转排序 Sequences。但是,这对于直接返回memcmp()
,strcmp()
等结果的比较函数从来都不是安全的,因为 POSIX 对这些函数没有任何此类限制。至少memcmp()
的某些最新版本可以返回INT_MIN
,从而导致错误的排序 Sequences。因此,我们删除了此限制。现在,如果调用者希望反转排序 Sequences,则必须使用INVERT_COMPARE_RESULT()
宏。
- 修复共享无效消息处理中的递归风险(Tom Lane)
例如,此错误可能导致无法访问刚由VACUUM FULL
处理的系统目录或索引。
此更改为LockAcquire
添加了一个新的结果代码,这可能会影响该函数的外部调用者,尽管只有非常不寻常的用法模式才会有问题。 LockAcquireExtended
的 API 也已更改。
- 在
SPI_connect()
和SPI_finish()
期间保存和恢复 SPI 的全局变量(Chapman Flack,Tom Lane)
当一个使用 SPI 的函数调用另一个函数时,这可以防止可能的干扰。
- 避免使用可能未对齐的页面缓冲区(Tom Lane)
发明新的联合类型PGAlignedBlock
和PGAlignedXLogBlock
,并使用它们代替纯字符数组,以确保编译器无法将缓冲区放置在未对齐的起始地址处。这可以解决在对对齐要求不高的平台上可能发生的核心转储,甚至可以在允许不对齐的平台上提高性能。
- 使
src/port/snprintf.c
遵循 C99 标准对snprintf()
的结果值的定义(Tom Lane)
在使用此代码的平台上(通常是 Windows),如果调用代码采用 C99 语义,则 C99 之前的行为可能导致无法检测到缓冲区溢出。
- 使用 clang 编译器在 i386 上构建时,要求使用
-msse2
(Andres Freund)
这样可以避免浮点溢出检查遗漏的问题。
- 修复 configure 对
strerror_r()
(Tom Lane)的结果类型的检测
在 Linux 上使用 icc 进行构建时(可能在其他情况下),先前的编码得到了错误的答案,从而导致 libpq 不会针对系统报告的错误返回有用的错误消息。
- 将时区数据文件更新为 tzdata 版本 2018g,以应对智利,斐济,摩洛哥和俄罗斯(伏尔加格勒)的 DST 法律变更,以及中国,夏威夷,日本,澳门和朝鲜的历史更正。