发布日期: 2019-02-14
该版本包含一些自版本11.1以来的修补。关于主版本11的新特性的信息,见第 E.3 节。
对于运行11.X的数据库,不需要转储/恢复。
缺省地,在fsync()
失败后用panic代替重试,以避免可能的数据损坏。(Craig Ringer, Thomas Munro)
当不能将内核数据缓冲区写出来时,一些流行的操作系统会丢弃缓冲区的内容,将这报告为fsync()
失败。如重新发出fsync()
请求,会成功,但实际上数据已丢失,这样继续下去就会冒数据损坏的风险。相反通过出一次panic状况,我们可以从WAL重放,这其中可能包含该情形下仅余下的数据拷贝。这当然令人讨厌且效率低下,但几乎没有其他选择。所幸的是这种情况很少发生。
新增加的服务器参数data_sync_retry用来控制此项设置;如果确定此情形下内核不丢弃脏数据缓冲区,可以设置data_sync_retry
为on
,以恢复过去的行为。
在文档中只包含每个主要发行分支的发行注释,而不包括该分支和所有后续分支的发行注释 (Tom Lane)
以前的策略导致的重复近乎失控。我们的计划是在项目的网站上提供发行注释的全部归档,但不在每次发布中重复。
修复分区表上具有INCLUDE
列的唯一索引的处理 (Álvaro Herrera)
该情况没有适当地检查唯一性条件。
确保分区表的NOT NULL
约束在其分区内得到遵守 (Álvaro Herrera, Amit Langote)
分离分区表时正确更新分区的表约束的目录状态 (Amit Langote, Álvaro Herrera)
以前,此类约束的pg_constraint
.conislocal
字段可能不正确地保留为false
,从而使其不可删除。转储/恢复或pg_upgrade可以解决此问题,但如有需要,可以手动调整目录字段。
在具有外键约束的分区表中附加或分离分区时,正确地创建或删除强制触发器 (Amit Langote, Álvaro Herrera)
避免在分区表中无用地创建重复的外键约束 (Álvaro Herrera)
当在分区表上使用ONLY
创建的索引还没有分区时,立即将其标记为有效 (Álvaro Herrera)
否则,无法让其生效。
分离分区时,使用安全的表锁级别 (Álvaro Herrera)
以前的表锁级别太弱,可能允许表上并发执行DDL,产生坏结果。
修复对分区表和具有继承孩子的表应用ON COMMIT DROP
和ON COMMIT DELETE ROWS
的问题 (Michael Paquier)
分区表上不允许COPY FREEZE
(David Rowley)
这最终应该能起作用,但需要一个非常复杂的补丁,可能有回补的风险。
修复索引列具有“快速默认值”(也就是说,表中已有一些行之后,又通过ALTER TABLE ADD COLUMN
,以指定缺省值来增加行)时可能出现的索引损坏 Andres Freund)
在ALTER TABLE ... ALTER COLUMN TYPE
时,正确调整“快速默认值” (Andrew Dunstan)
获取多个缓冲区锁时避免可能的死锁 (Nishant Fnu)
避免GIN清理和并发索引插入之间死锁 (Alexander Korotkov, Andrey Borodin, Peter Geoghegan)
此更改部分恢复了版本10.0中引入的性能改进,该改进尝试减少删除GIN posting树页面期间锁定的索引页数。现在已经发现这会导致死锁,所以我们在进一步分析之前将之移除。
避免热备份查询与GIN索引页删除重放间的死锁 (Alexander Korotkov)
修复索引表达式或谓词在使用时逻辑复制可能的崩溃 (Peter Eisentraut)
避免表重写期间对TOAST数据进行无用的、高代价的逻辑解码 (Tomas Vondra)
修复同步复制启用时停止WAL发送器子集的逻辑 (Paul Guo, Michael Paquier)
避免在删除元组的WAL记录中写入不正确的副本标识字段 (Stas Kelvich)
防止在COPY
到视图或外部表期间错误地使用WAL跳过优化 (Amit Langote, Michael Paquier)
在选择哪些文件要归档时,使归档器优先归档WAL历史文件,而后才是WAL数据文件 (David Steele)
修复使用sub-SELECT
作为源、有多个SET
子句的UPDATE
可能出现的崩溃 (Tom Lane)
修复只有零行输入到json[b]_populate_recordset()
或json[b]_to_recordset()
时的崩溃 (Tom Lane)
避免libxml2返回空错误信息时的崩溃 (Sergio Conde Gómez)
修复具有许多列(大约超过800)的表的不正确JIT元组变形代码 (Andres Freund)
修复基于哈希的分组中性能和内存泄漏问题 (Andres Freund)
修复由于排序规则分配的处理不一致而导致的与分组相关的错误 (Andrew Gierth)
在某些情况下,如果表达式包括可排序数据类型上的操作,认为应当匹配的表达式不见得就匹配。
修复CALL
语句参数中排序规则敏感的表达式的分析处理 (Peter Eisentraut)
检测到CALL
语句的参数列表中有错误后,确保正确清除 (Tom Lane)
检查LEAST()
或GREATEST()
下面的比较函数是否防泄漏,而不是假设它就是 (Tom Lane)
由btree比较函数引起的实际信息泄漏通常很难发生,但原则上它们可能发生。
修复在Gather计划节点上方和下方涉及嵌套循环的查询的不正确规划 (Tom Lane)
如果嵌套循环的两层都要将同样的变量传到右侧,就会产生错误的计划。
修复外部表扫描时必须评估横向引用的查询的错误计划 (Tom Lane)
修复行比较的第一列匹配索引列,但后面并不匹配且索引包含(非键)列时的查询器故障 (Tom Lane)
修复极端情况下归并连接成本的低估 (Tom Lane)
当外部键范围比内部键范围小得多时,计划器可能更偏向归并连接,即使内部有太多重复键,这是一种糟糕的选择。
当查询包含数千条索引子句时,避免O(N^2)的计划时间增长 (Tom Lane)
提高大型继承或分区表组的规划速度 (Amit Langote, Etsuro Fujita)
改进并发更新行的ANALYZE
处理 (Jeff Janes, Tom Lane)
以前,由正在进行的事务删除的行在ANALYZE
样本中是被忽略的,但这会导致比包含它们有更大的不一致性。实际上,现在采样对应于ANALYZE
开始时的MVCC快照。
使TRUNCATE
忽略作为其他会话的临时表的继承子表 (Amit Langote, Michael
Paquier)
这使TRUNCATE
与其他命令的行为保持一致。以前这种情况通常是最终失败。
修复TRUNCATE
以更新适当表的统计计数器 (Tom Lane)
如果被截断的表有TOAST表,则该表计数器将被重置。
正确处理ALTER TABLE ONLY ADD COLUMN IF NOT EXISTS
(Greg Stark)
允许在热备模式下UNLISTEN
(Shay Rojansky)
这必然是一个no-op,因为热备模式下不允许LISTEN
;但允许虚操作简化客户端中的会话状态重置逻辑。
修复一些模式和数据类型权限列表中缺少的角色依赖 (Tom Lane)
有些情况下可以删除已授予权限的角色。这不会立刻有问题,但是后来的转储/重载或升级失败,会出现尝试给全数字角色名授予权限的症状。
防止在两阶段事务中使用会话的临时模式 (Michael Paquier)
访问此类事务中的临时表已被禁止了很长时间,但仍有可能导致在临时对象上其他操作的问题。
确保添加或删除外键约束后关系缓存适当地更新 (Álvaro Herrera)
该疏忽会导致已有会话执行新建约束失败或继续执行已删除的约束。
确保重命名约束后关系缓存适当地更新 (Amit Langote)
修复GiST索引微清理操作的重放,这样并发热备查询不会看到不一致的状态 (Alexander Korotkov)
防止空GIN索引页回收得太快,导致并发搜索失败 (Andrey Borodin, Alexander Korotkov)
修复极端情况下浮点数到整数强制转换的失败 (Andrew Gierth, Tom Lane)
比最大有效整数值大一点点的值可能不会被拒绝,然后会溢出,反而产生最小的有效整数。此外,应舍入最小或最大整数值的值可能被错误地拒绝。
修复pg_hba.conf
中LDAP认证入口的ldapserver
参数内由空格分隔的主机名列表的处理 (Thomas Munro)
进行PAM认证请求时,如果是通过Unix套接字连接,则不要设置PAM_RHOST
变量 (Thomas Munro)
以前,该变量设置为[local]
,这其实没什么用,因为它应为主机名。
不允许设置client_min_messages
的值高于ERROR
(Jonah Harris, Tom Lane)
以前,可以将此变量设置为FATAL
或PANIC
,这会抑制向客户端传输一般错误消息。但是,这与PostgreSQL有线协议规范中给出的保证相违背,导致一些客户端变得非常混乱。在已发布的分支中,通过将这些设置默认为有意义的ERROR
来解决此问题。版本12和以后的版本完全不会考虑这些替代方案。
修复ecpglib,优先使用uselocale()
或_configthreadlocale()
,而后才是setlocale()
(Michael Meskes, Tom Lane)
由于setlocale()
不是线程局部的,甚至可能不是线程安全的,所以导致以前的编码在多线程ecpg应用程序中出了问题。
修复通过ecpg SQLDA (SQL描述符区域)传数值数据的错误结果 (Daisuke Higuchi)
带前导零的值未正确复制。
修复psql的\g
target
元命令以使用COPY TO STDOUT
(Daniel Vérité)
以前忽略了target
选项,因此拷贝的数据总是跑到当前查询输出目标那里。
使psql的LaTeX输出格式正确地呈现特殊字符 (Tom Lane)
反斜杠和其他一些ASCII标点符号未能正确呈现,导致文档语法错误或输出中出现错误字符。
当指定--random-seed=
时,使pgbench随机数生成完全确定且平台无关 (Fabien Coelho, Tom Lane)
N
在任何特定平台上,用指定的N
值获得的序列可能与打上补丁之前的序列不同。
修复pg_basebackup和pg_verify_checksums以适当地忽略临时文件 (Michael Banck, Michael Paquier)
修复pg_dump对间接依赖主键的物化视图的处理 (Tom Lane)
这导致对此类视图的转储归档条目的错误标记,从而导致有关“归档项的片段顺序不对”的无害警告;害处不大的是,依赖于这些标签的选择性恢复选项(例如--section
)可能会出现错误行为。
使pg_dump包含ALTER INDEX
SET STATISTICS
命令 (Michael Paquier)
当添加了将统计目标附加到索引表达式的功能时,我们忘记教pg_dump处理相关内容,因此在转储/重载中丢掉了这些设置。
修复pg_dump对具有OID的表的转储 (Peter Eisentraut)
如果需要将WITH OIDS
子句应用于要转储的第一个表,则省略该子句。
避免在某些平台上,当pg_dump或pg_restore尝试报告错误时发生空指针解引用崩溃 (Tom Lane)
防止由于内联压缩数据导致的contrib/amcheck
错误索引损坏报告 (Peter Geoghegan)
如果COPY FROM PROGRAM
早先停止读取程序输出,则适当地忽略SIGPIPE
错误 (Tom Lane)
这种情况实际上不能直接通过COPY
达到,但是在使用contrib/file_fdw
时可能会发生。
修复contrib/hstore
以计算在版本8.4或之前版本创建的空hstore
值的正确的哈希值 (Andrew Gierth)
之前的编码并未给出与新版本创建的空hstore
值相同的结果,因此可能导致哈希连接或哈希聚集中出现错误结果。如果表中可能包含早在8.4之前就存储的数据,并且从那时起从未转储/重新加载过这些数据,则建议对基于hstore
列构建的任何哈希索引重新做索引。
避免向contrib/intarray
的gist__int_ops
索引支持提供大量输入时崩溃和过多的运行时间 (Andrew Gierth)
在configure时,如果没有找到python
,则接着找python3
,然后是python2
(Peter Eisentraut)
这允许在已不提供无版本号的python
可执行文件的平台上配置PL/Python,而无需显式指定PYTHON
。
在已安装的头文件集中包含与JIT相关的头文件 (Donald Dong)
在pgxs构建中,支持新的Makefile变量PG_CFLAGS
, PG_CXXFLAGS
和PG_LDFLAGS
(Christoph Berg)
这简化了扩展构建过程的定制。
修复用Perl编写的构建脚本,不在假定“.
”在搜索路径中,因为最近的Perl版本并不包含该功能 (Andrew Dunstan)
修复OpenBSD上服务器命令行选项分析的问题 (Tom Lane)
重新定位set_rel_pathlist_hook
的调用,以便扩展程序可以用它来为并行查询提供部分路径 (KaiGai Kohei)
这不会影响现有的用例。
将时区文件更新为tzdata 2018i版本,以应对哈萨克斯坦、梅特拉卡特拉、圣多美和普林西比的DST法律变更。哈萨克斯坦的Qyzylorda区一分为二,从而创建了一个新的Asia/Qostanay区,因为某些地区没有改变UTC偏移量。对香港(中国)和众多太平洋岛屿的历史性更正。