发布日期:. 2015-10-08
这个版本包含自9.4.4以来的各种修复。关于9.4主版本的新特性信息,请查看 第 E.36 节。
防止json
解析中的堆栈溢出
(Oskari Saarenmaa)
如果应用程序从任意用户输入构造PostgreSQL json
或jsonb
值,
则应用程序的用户可以可靠地崩溃PostgreSQL服务器,导致暂时的拒绝服务。 (CVE-2015-5289)
修复contrib/pgcrypto
,检测和报告过短的
crypt()
盐 (Josh Kupershmidt)
某些无效的salt参数破坏了服务器或公开了几个字节的服务器内存。 我们没有排除在公开字节中安排机密信息存在的攻击的可行性,但似乎不大可能。 (CVE-2015-5288)
在属于外部子事务的门户(光标)失败后修复子事务清理 (Tom Lane, Michael Paquier)
在外部子事务游标中执行的函数可能会引用在内部子事务中创建的关系导致断言失败或崩溃。
在commit_delay
设置时,修复WAL插入期间可能的死锁 (Heikki Linnakangas)
确保在可更新视图中引用的所有关系在更新语句期间被正确锁定 (Dean Rasheed)
将关系插入关系缓存“init文件”中 (Tom Lane)
在最近次要版本的修补程序中的监督会导致从init文件中省略
pg_trigger_tgrelid_tgname_index
。后续会话检测到这一点,
然后认为init文件被破坏,并且默认忽略它,导致会话启动时间显着降低。
除了修复错误之外,还要安装一些防护装置,以使任何类似的未来错误都会更加明显。
当将许多元组插入到SPI查询结果中时,避免使用O(N^2)行为 (Neil Conway)
当有许多未读通知时,改进LISTEN
启动时间 (Matt Newell)
当会话改变大量的外键约束时修复性能问题 (Jan Wieck, Tom Lane)
主要是在为具有数千个表的数据库恢复pg_dump输出时出现。
默认情况下禁用SSL重新协商 (Michael Paquier, Andres Freund)
虽然使用SSL重新协商理论上是一个好主意,但我们在实践中看到了太多的错误,
包括底层的OpenSSL库和我们的使用。重新协商将在9.5及以后完全删除。
在较旧的分支中,只需将ssl_renegotiation_limit
的默认值更改为零(禁用)。
降低*_freeze_max_age
参数的最小值
(Andres Freund)
这主要是为了使相关行为的测试较少耗时, 但是对于具有有限磁盘空间的安装也可能是有价值的。
限制wal_buffers
的最大值为2GB,以避免服务器崩溃 (Josh Berkus)
当只能在服务器启动时设置的参数在postgresql.conf
中多次显示时,
请避免记录投诉,并修正include_dir
指令后的行号计数 (Tom Lane)
修复numeric
值的乘法中罕见的内部溢出
(Dean Rasheed)
防止难以达到的堆栈溢出,包括记录类型、范围类型、json
、
jsonb
、tsquery
、ltxtquery
和query_int
(Noah Misch)
修复日期时间输入中DOW
和DOY
的处理
(Greg Stark)
这些令牌并不意味着在datetime值中使用,但以前它们导致不透明的内部错误消息而不是 “无效输入语法”。
向正则表达式匹配中添加更多查询取消检查 (Tom Lane)
向正则表达式添加递归深度保护,SIMILAR
TO
和LIKE
匹配 (Tom Lane)
合适的搜索模式和低堆栈深度限制可能会导致堆栈超载崩溃。
修复正则表达式执行中潜在的无限循环 (Tom Lane)
一个搜索模式可以表面上匹配零长度字符串,但是实际上因为反向引用并不匹配, 会导致一个无限循环。
在正则表达式执行中,即使当匹配为零长度时, 也可以正确记录用于捕获量词内的括号的匹配数据 (Tom Lane)
修复正则表达式编译中的低内存故障 (Andreas Seltenreich)
修复在正则表达式执行期间低概率的内存泄漏 (Tom Lane)
修复在事务中止期间锁清除中罕见的低内存故障 (Tom Lane)
修复在使用小的work_mem
设置的tuplestores时,
“排序期间意外的内存不足情况”错误 (Tom
Lane)
修复qsort
中非常低可能性的堆栈溢出 (Tom Lane)
修复“无效内存分配请求大小”与大work_mem
设置的哈希连接失败 (Tomas Vondra, Tom Lane)
修复各种计划错误 (Tom Lane)
这些错误会导致不正确的查询计划会给出错误的答案,或者启用断言的构建中的断言失败, 或者奇怪的计划错误,比如“无法为给定的查询设计查询计划”、 “找不到要排序的路径项”、“计划不应该参考子计划的变量” 或“无法将所有NestLoopParams分配给计划节点”。 感谢Andreas Seltenreich和Piotr Stefaniak的模糊测试,揭露了这些问题。
提高规划者在大型继承集上的UPDATE
/DELETE
的性能 (Tom Lane, Dean Rasheed)
确保在postmaster启动时备用升级触发器文件被删除 (Michael Paquier, Fujii Masao)
如果这些文件出现在用于初始化一个新的备用服务器的数据库备份中, 则可以防止不必要的升级。
在postmaster关闭期间,确保移除每套接字锁文件并且在我们移除
postmaster.pid
文件之前关闭监听套接字 (Tom Lane)
如果外部脚本尝试在pg_ctl stop
返回时立即启动新的postmaster,
则可以避免竞争条件失败。
确保postmaster不会退出,直到它所有的子进程都消失,即使是立即关闭模式 (Tom Lane)
像上一项一样,这样可以避免与随后启动的postmaster发生竞争。
修复崩溃恢复期间主进程对启动进程崩溃的处理 (Tom Lane)
如果,在崩溃恢复循环期间,启动进程还未恢复数据库一致性就崩溃了, 我们会尝试加载一个新的启动进程,这通常会再次崩溃,导致无限循环。
使多重环绕的紧急自动清理更健壮 (Andres Freund)
当我们尝试发出信号并且自动清理工作者已经不在时,请勿打印WARNING
,
并减少此类信号的日志冗长度 (Tom Lane)
如果服务器时钟向后大量移动,防止自动清理加载进程睡眠过长 (Álvaro Herrera)
确保GIN索引未完成插入列表的清理可以通过取消请求中断 (Jeff Janes)
允许重新使用GIN索引中的全零页面 (Heikki Linnakangas)
这样的页面可能会在崩溃后遗留下来。
修复SP-GiST索引中全零页面的处理 (Heikki Linnakangas)
VACUUM
尝试回收这样的页面,但是执行的方式不是崩溃安全的。
修复了一个在subtrans/multixact截断中导致关于“明显回绕” 的其他无害警告的一个接一个的错误 (Thomas Munro)
修复PL/pgSQL的错误内容信息中CONTINUE
和
MOVE
语句类型的错误报告
(Pavel Stehule, Tom Lane)
修复PL/Perl以正确处理非ASCII错误消息文本 (Alex Hunsaker)
修复当返回一个record
结果的字符串表示时,
PL/Python的崩溃 (Tom Lane)
修复PL/Tcl中忽略了检查malloc()
调用失败的某些地方
(Michael Paquier, Álvaro Herrera)
在contrib/isn
中,修复以979开头的ISBN-13编号的输出 (Fabien Coelho)
以979(但不是9790)开头的EAN被认为是ISBN,但是它们必须以新的13位格式打印, 而不是10位格式。
改进contrib/pg_stat_statements
对查询文本垃圾收集的处理 (Peter Geoghegan)
包含查询文本的外部文件可能会膨胀到非常大的大小; 一旦它超过1GB,修剪它的尝试将失败,很快导致文件无法读取的情况。
改进contrib/postgres_fdw
对排序相关的决定的处理 (Tom Lane)
主要的用户可见效果预计是,在更多的情况下,
涉及varchar
列的比较将被发送到远程服务器执行。
改进libpq对内存不足条件的处理 (Michael Paquier, Heikki Linnakangas)
修复ecpg中内存泄露和缺少内存不足检查 (Michael Paquier)
修复psql的数字输出区域感知格式的代码 (Tom Lane)
\pset numericlocale on
调用的格式化代码对于一些不常见的情况
(例如具有指数而不是小数点的数字)做错了事情。它也可以从money
数据类型中转移已经本地化的输出。
当没有当前连接时,在psql的\c
命令中防止崩溃 (Noah Misch)
让pg_dump正确处理继承的NOT VALID
检查约束 (Tom Lane)
修正在pg_dump的目录输出格式中默认的zlib 压缩级别的选择 (Andrew Dunstan)
确保在pg_dump中使用tar 格式输出创建的临时文件不是世界可读的 (Michael Paquier)
修复pg_dump和pg_upgrade以支持
postgres
或template1
数据库在非缺省表空间中的情况
(Marti Raudsepp, Bruce Momjian)
修复pg_dump在从过旧的服务器转储而获得特定的权限类型时, 正确地处理对象权限 (Tom Lane)
当从9.2之前的服务器转储数据类型,和从7.3之前的服务器转储函数或过程语言时,
pg_dump
将产生撤销所有者的授予权限然后赋予所有权限给PUBLIC
的
GRANT
/REVOKE
命令。因为权限仅包括USAGE
和EXECUTE
,所以这不是一个安全问题,但是,对于旧系统的行为来说,
这当然是一个令人惊讶的表现。修复它在这些情况下单独保留默认权限状态。
修复pg_dump以转储shell类型 (Tom Lane)
Shell类型(也就是还未完全定义的类型)对于很多方面是没有用的, 但是pg_dump应该转储它们。
修复pg_dump和其他客户端程序中的各种小内存泄漏 (Michael Paquier)
修复pgbench的进度报告行为,当查询或 pgbench本身卡住 (Fabien Coelho)
修复Alpha硬件的spinlock汇编代码 (Tom Lane)
修复PPC硬件的spinlock汇编代码与AIX的本地汇编程序兼容 (Tom Lane)
如果gcc被配置为使用本机汇编程序,这种情况正在变得越来越普遍, 那么使用gcc构建就不起作用。
在AIX上,测试-qlonglong
编译器选项而不仅仅假设它是安全的
(Noah Misch)
在AIX上,使用-Wl,-brtllib
连接选项以允许在运行时解决符号
(Noah Misch)
Perl在5.8.0及以后的版本中依赖于此能力。
由于编译器错误,在使用32位xlc编译时, 避免使用内联函数 (Noah Misch)
在需要时为sched_yield()
使用librt
,
在某些Solaris版本上是这样的 (Oskari Saarenmaa)
将编码UHC
转换为Windows代码页949
(Noah Misch)
这将修复非附加到任何特定数据库(如postmaster)的进程的非ASCII日志消息的表示。
在Windows上,在事务之外进行编码转换到UTF16时,避免失败, 例如日志消息 (Noah Misch)
修复postmaster由于没有拷贝setlocale()
的返回值而启动失败 (Noah Misch)
这已在Windows系统上报告,其ANSI代码页设置为CP936(“Chinese (Simplified, PRC)”), 并且可能与其他多字节代码页一起发生。
修复Windows install.bat
脚本以处理包含空格的目标路径名 (Heikki Linnakangas)
让PostgreSQL版本号的数值形式
(例如90405
)对扩展Makefiles可用,
作为一个名为VERSION_NUM
的变量 (Michael Paquier)
更新时区数据文件到tzdata版本2015g,
因为DST规律在开曼群岛、斐济、摩尔多瓦、摩洛哥、诺福克岛、北朝鲜、
土耳其和乌拉圭发生了改变。加拿大北洛矶山脉有一个新的时区名
America/Fort_Nelson
。