💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# E.16\. 发布9.1.3 > **发布日期:** 2012-02-27 该发布包含了9.1.2的各种修复。 为了9.1主要版本的新功能的更多信息, 参阅[Section E.19](#calibre_link-148)。 ## E.16.1\. 迁移到版本9.1.3 为运行9.1.X不需要转储/恢复。 然而,如果你从9.1.2的更早版本更新, 请参阅9.1.2的发布说明。 ## E.16.2\. 变化 * 需要为`CREATE TRIGGER`触发器函数上的执行权限(Robert Haas) 这个丢失检查可能允许其他用户执行带有伪造输入数据的触发器函数, 通过安装它到它拥有的表上。 对于触发器函数标记`SECURITY DEFINER`是唯一重要的, 因为否则触发器函数运行为表所有者。(CVE-2012-0866) * 删除SSL证书中常见名称长度的任意限制(Heikki Linnakangas) libpq和服务器截断从32字节SSL证书中提取的通用名。 这通常会导致没有什么比一个意想不到的验证失败更糟糕的,但是有一些 令人难以置信的情况,它可能允许一个证书持有者模仿另外一个。 该受害者必须有32字节长的通用名。并且攻击者必须说服可信任CA发布证书, 其中通用名有字符串作为前缀。 伪装服务器也需要一些额外的开发重定向客户端连接。(CVE-2012-0867) * 在名字写入pg_dump说明中转换新行到空白(Robert Haas) pg_dump关于审查输出脚本中SQL注释发出的对象名是不谨慎的。 包含换行符的名字至少使得脚本语法上不正确。 当脚本被重新加载时,恶意制作对象名可能出现SQL注射风险。(CVE-2012-0868) * 修复来自并行清理插入的btree索引崩溃(Tom Lane) 通过插入引起的索引页分裂有时可以导致同时运行`VACUUM` 而错过删除本应该删除的索引项。相应表行被删除后, 该悬挂索引项可能导致错误(比如"不能读取文件中块N...")或者更糟, 无关行后默默的错误查询结果被重新插入到当前自由表位置。 这个错误自从发布8.2就出现了, 但是发生如此罕见以致它没有被诊断直到现在。 如果你有理由怀疑它已经在你的数据库中发生, 那么重新索引受影响索引将修复这问题。 * 修复WAL回放期间共享缓冲区临时调零(Tom Lane) 重放逻辑有时归零并且重填共享缓冲区,因此内容瞬时无效。 在热备模式中这可以导致正在并行执行的查询看到垃圾数据。 可能导致不同症状, 但是最常见的是"无效内存分配请求大小"。 * 修复`READ COMMITTED`复查中数据修改`WITH`子计划处理(Tom Lane) 如果父`UPDATE`或者`DELETE`命令需要被重新评估一行或多行, 由于`READ COMMITTED`模式中并发更新,那么包含 `INSERT`/`UPDATE`/`DELETE` 的`WITH`子句可能崩溃。 * 修复SSI事务清理中困境情况(Dan Ports) 当结束一个读写串行化事务时,如果所有剩余的活跃的可串行化事务是 只读的,那么可能产生崩溃。 * 在热备份崩溃后修复postmaster以尝试重启(Tom Lane) 当在热备模式中进行操作时如果任何后端进程崩溃,那么 逻辑错误导致postmaster终止,而不是尝试重启集群。 * 修复通过最新更新行拥有的toast值的 `CLUSTER`/`VACUUM FULL`的处理(Tom Lane) 这种疏忽可能导致"重复关键值违背唯一约束"错误 被报告给这些命令之一中的 toast表的索引。 * 当改变表所有者时,更新每列权限,不仅仅每个表权限(Tom Lane) 不这样做就意味着 任何先前已授权列权限 仍然显示为已被旧的所有者授权。 这意味着既不是新所有者也不是 超级用户可以撤销目前难以寻找的到表所有者权限。 * 支持外数据封装和`REASSIGN OWNED`中的外服务器(Alvaro Herrera) 如果它需要改变任何对象的所有权, 那么该命令伴随"意外数字"错误失败。 * 允许`ALTER USER/DATABASE SET`中 一些设置的不存在值(Heikki Linnakangas) 允许`default_text_search_config`, `default_tablespace`和`temp_tablespaces` 被设置为不知道的名字。 这是因为它们可能在另一个数据库中已知, 该设置打算使用的地方, 或者为了表空间情况因为表空间可能不会被创建。 同样问题是先前已确认为`search_path`, 并且这些设置像那一个。 * 修复`INSERT`表达式中通过`COLLATE`产生的 "不支持节点类型"错误(Tom Lane) * 当我们删除后提交表文件有问题时,避免崩溃(Tom Lane) 删除表导致事务提交之后删除底层磁盘文件。 在失败的情况中(比如,由于错误文件权限) 那么该代码应该发出警告信息并且继续, 因为它太晚了而终止了事务。 这个逻辑已作为发布8.4被打破, 导致这种情况引起PANIC和不可重新启动的数据库。 * 在`DROP TABLESPACE`的WAL回放期间从发生的错误中恢复(Tom Lane) 重播将尝试删除该表空间目录,但是 可能会失败的原因是多方面的(例如,这些目录上不正确的 所有权和权限)。以前该重播代码会恐慌, 导致数据库没有手册干预不能重新启动。 似乎记录问题并且继续是更好的,因为 删除该目录失败的唯一结果是一些浪费的磁盘空间。 * 修复为热备在记录AccessExclusiveLocks中的竞争条件(Simon Riggs) 有时锁可能被记录为通过"事务零"持有。 这对于从服务器上产生断言失败至少是已知的, 并且可能是更严重问题的原因。 * 在WAL回放期间正确跟踪OID计数器,即使当它包围周围(Tom Lane) 先前OID计数器可以保持在较高的值上直到系统退出回放模式。 实际结果通常为零,但是存在这样一种情况, 备用服务器提升到主服务器可能需要很长时间 增加OID计数器到一个合理值,一旦该值是必须的。 * 在崩溃恢复开始时阻止发出误导性的 "一致的恢复状态到达" 日志信息(Heikki Linnakangas) * 修复`pg_stat_replication`.`replay_location` 的初始值(Fujii Masao) 以前,显示的值可能是错误的直到至少一个WAL记录已被回放。 * 修复带有`*`附属的正则表达式逆向引用(Tom Lane) 而不是执行一个确切的字符串匹配, 该代码有效地接受任何满足模式子表达式引用逆向引用符号的字符串。 类似问题仍然困扰着被嵌入到大的量化表达式中的逆向引用,而不是量词的直接主题。 这将在未来PostgreSQL发布中得以解决。 * 修复`inet`/`cidr`值处理中最新引进的内存泄露(Heikki Linnakangas) PostgreSQL的2011年12月份发布的补丁 导致了这些操作中内存泄露,这可能是重要情况比如在这样的列上 编译btree索引。 * 修复规划器的能力通过`UNION ALL`推动索引表达式限制(Tom Lane) 优化这种类型通过9.1.2中另一个问题修复被无意识禁用。 * 修复引用继承表上`UPDATE`/`DELETE`中的 `WITH`子句规划(Tom Lane) 这个错误导致"不能找到CTE规划"错误。 * 修复GIN估计成本以处理`column IN (...)`索引条件(Marti Raudsepp) 如果这一条件与GIN索引一起使用,那么这种疏忽通常导致崩溃。 * 当退出打开的失败事务会话,防止断言失败(Tom Lane) 这个错误对正常编译未启用断言没有影响。 * 修复SQL语言函数中 `CREATE TABLE AS`/`SELECT INTO`之后的悬挂指针(Tom Lane) 在大多数情况中这导致断言启用编译中断言失败, 但是更糟结果是可能的。 * 避免Windows上syslogger中文件句柄的双关闭(MauMau) 通常这个错误是无形的,但是当在Windows的调试版本上运行时,它可能导致异常。 * 修复plpgsql中I/O转换关系内存泄露(Andres Freund, Jan Urbanski, Tom Lane) 某些操作可能泄露内存直到当前函数结束。 * 解决perl的SvPVutf8()函数中的错误(Andrew Dunstan) 当操作的typeglob或者某个只读对象比如`$^V`时,该函数崩溃。 使得plperl避免传递这些给它。 * 在pg_dump中,如果扩展本身没有被备份, 那么不备份扩展的配置表的内容(Tom Lane) * 提升继承表列的pg_dump的处理(Tom Lane) pg_dump处理不当的情况下,一个子列 比它的父列有不同的缺省表达式。 如果缺省文本上与父类的缺省是相同的,但不是真的 相同(例如,由于模式搜索路径的差异)不会被认为是不同的, 所以在转储和恢复后 子类可以被允许继承父的缺省。在它们的父类不能微妙地错误地被恢复的地方 子列`非空`。 * 为了INSERT形式表数据修复pg_restore的 直接到数据库模式(Tom Lane) 当使用发布日期2011年九月或者十二月的pg_restore的时候, 从归档文件中恢复直接到数据库伴随 `--inserts`或者`--column-inserts`选项而失败, 作为另外一个问题修复的疏忽结果。 归档文件本身没有错,而且文本模式输出是好的。 * pg_upgrade处理plpython 的共享库的重命名(Bruce Momjian) 更新包含plpython的9.1之前数据库可能失败,因为这种疏忽。 * 允许pg_upgrade处理包含`regclass`列的表(Bruce Momjian) 因为pg_upgrade现在负责保存`pg_class` OID, 这一限制没有任何理由。 * 当正在寻找SSL客户端证书文件时,使得 libpq忽略`ENOTDIR`错误(Magnus Hagander) 这允许建立SSL连接,虽然没有证书, 即使当用户的家目录被设置为像`/dev/null`的目录。 * 修复ecpg的SQLDA区域中 一些字段对齐问题(Zoltan Boszormenyi) * 在ecpg`DEALLOCATE`语句 中允许`AT`选项(Michael Meskes) 支持这个的基础设施已有一段时间了, 但由于疏忽仍然有拒绝这种情况的错误检查。 * 当在ecpg中定义varchar结构时,不要使用变量名(Michael Meskes) * 修复`contrib/auto_explain`的 JSON模式以产生有效的JSON(Andrew Dunstan) 当它使用花括号时,该输出使用顶层方括号。 * 修复`contrib/intarray`的`int[] &int[]`操作符 中的错误(Guillaume Lelarge) 如果最小整数的两个输入数组中常见的是1, 并且在其中之一数组中有较小的值,然后将1 从结果中错误地省略。 * 修复`contrib/pgcrypto`的 `encrypt_iv()`和`decrypt_iv()`中的错误检查(Marko Kreen) 这些函数没有成功报告无效输入错误的某些类型, 并且反而为不正确输入返回随机垃圾值。 * 修复`contrib/test_parser`中一字节缓冲区超出范围(Paul Guyot) 该代码将尝试读取比它应该的又一个字节,这将在困境情况下崩溃。 因为`contrib/test_parser`只是示例代码, 这本身不是一个安全问题,但不好的例子代码仍然是差的。 * 如果可用,那么 在ARM上为spinlocks使用`__sync_lock_test_and_set()` (Martin Pitt) 这个函数替换`SWPB`指令先前用法,它已经废弃并且在ARMv6和之后的不可用。 报告建议该旧代码在最新ARM上以显著方式使用, 但是不能简单地连锁并发访问,导致多进程操作中的离奇失败。 * 当编译接受它的gcc版本时, 使用`-fexcess-precision=standard`选项(Andrew Dunstan) 这阻止各种各样的情节,其中gcc最新版本将产生创造性结果。 * 允许FreeBSD上线程Python的使用(Chris Rees) 我们配置脚本先前认为这种组合不会允许;但是FreeBSD修复该问题, 因此删除错误检查。 * 允许MinGW建立使用标准命名OpenSSL库(Tomasz Ostrowski)