发布日期:. 2022-02-10
本次发布包含来自 11.14 的多项修复。 有关 11 主版本新特性的说明,请参见 Section E.23.
修复当并非所有索引列都可返回时的仅索引扫描计划 (Tom Lane)
如果一个索引同时具有可返回列和不可返回列,且其中一个不可返回列是使用 出现在可返回索引列中的表列的表达式,那么使用该表达式的查询可能会产生一个 尝试读取不可返回列的仅索引扫描计划,而不是按预期从可返回列重新计算表达式。 不可返回列将读取为 NULL,导致错误的查询结果。
确保将类型转换到未指定的 typmod 时生成 RelabelType 节点 而非长度强制函数调用(Tom Lane)
虽然强制函数应该做正确的事情(即什么都不做), 但这种转换效率不必要地低下。
修复当数据库一致性恰好在 WAL 页面边界处达到时的 WAL 重放失败 (Álvaro Herrera)
修复物理副本的启动以容忍事务 ID 回卷 (Abhijit Menon-Sen,Tomas Vondra)
如果副本服务器在主库上的活跃事务集跨越回卷边界时启动 (即有些较新的事务的 XID 比较旧的事务小), 副本将因 “out-of-order XID insertion in KnownAssignedXids” 而失败。副本会重试,但永远无法越过该错误。
移除在逻辑复制连接上发出的 SQL 命令的词法限制(Tom Lane)
walsender 进程会对包含未加引号的分号的 SQL 命令失败, 或者对包含奇数个单引号或双引号的美元引用字面量失败, 或者当 SQL 命令以注释开头时失败。 此外,错误的错误恢复可能导致后续命令也出现意外错误。
修复事务的最后一个子事务的提交时间戳可能丢失的问题 (Alex Kingsborough,Kyotaro Horiguchi)
确保在检查点期间对 pg_logical/mappings 子目录执行 fsync(Nathan Bossart)
在某些文件系统上,这一疏忽可能导致在系统崩溃后丢失逻辑重写状态文件。
为分区表构建扩展统计信息(Justin Pryzby)
之前的一个错误修复禁用了为旧式继承树构建扩展统计信息, 但它也阻止了为分区表构建这些统计信息,这是一个不必要的限制。 此变更允许 ANALYZE 计算分区表的统计对象的值。 (但请注意,自动清理本身不处理分区表,因此如果需要维护此类统计信息, 必须定期对分区表发出手动 ANALYZE。)
忽略继承树的扩展统计信息(Justin Pryzby)
目前,扩展统计信息的值只是针对每个表本地计算的, 而不是针对整个继承树。但是,在规划跨继承树的查询时, 这些值被错误地参考了,可能导致比默认估计更差的结果。
当分区表的行类型在其他地方被用作复合类型时, 禁止修改其列的数据类型(Tom Lane)
这一限制对于普通表早已存在,但由于疏忽,对分区表未做检查。
禁止对作为副本标识索引一部分的列执行 ALTER TABLE ... DROP NOT NULL (Haiying Tang,Hou Zhijie)
对于主键索引已经存在相同的禁止规则。
在 ALTER TABLE ADD PRIMARY KEY USING INDEX 期间正确更新缓存的表状态(Hou Zhijie)
并发会话未能更新其关于表是否具有主键的判断, 可能导致不正确的逻辑复制行为。
在切换 REPLICA IDENTITY 索引时正确更新缓存的表状态 (Tang Haiying,Hou Zhijie)
并发会话未能更新其关于哪个索引是副本标识索引的判断, 可能导致不正确的逻辑复制行为。
避免在重新分配大量对象所有权的 REASSIGN OWNED BY 操作期间泄漏内存(Justin Pryzby)
修复出现在 INSERT ... VALUES 规则中的 整行变量的显示(Tom Lane)
整行变量会被打印为 “var.*”, 但这允许在规则重新加载时将其展开为各个列,导致不同的语义。 附加显式类型转换以防止这种情况,正如我们在其他地方所做的那样。
修复或移除一些不正确的断言 (Simon Riggs,Michael Paquier,Alexander Lakhin)
这些错误应该只影响调试构建,不影响生产环境。
修复在多线程使用 libpq 或 ecpglib 早期报告的错误消息 本地化失败的竞态条件(Tom Lane)
避免从 libpq 的 PQcancel 函数中调用 strerror(Tom Lane)
PQcancel 应该可以安全地从信号处理程序中调用, 但 strerror 不是安全的。 这一错误用法仅在向服务器发送取消消息失败的不太可能的情况下才会发生, 这也许解释了为什么没有相关报告。
使 psql 的 \password 命令默认设置 CURRENT_USER 的密码, 而非连接的原始用户名(Tom Lane)
这与文档中描述的行为一致,并且避免了在会话开始后执行了 SET ROLE 或 SET SESSION AUTHORIZATION 时可能出现的权限失败。 为防止混淆,现在密码提示中包含了要操作的角色名称。
在 psql 和其他一些客户端程序中, 避免在 Ctrl-C 信号处理程序中尝试调用 gettext() (Tom Lane)
虽然没有已报告的失败可追溯到此错误,但这样做几乎不可能是安全的。
允许取消 pg_receivewal 和 pg_recvlogical 中的初始密码提示 (Tom Lane,Nathan Bossart)
之前在这些程序提示输入密码时无法通过 Ctrl-C 终止它们。
修复 pg_dump 对用户定义类型转换的转储顺序 (Tom Lane)
在极少数情况下,输出脚本可能在用户定义类型转换被创建之前就引用了它。
修复 pg_dump 和 pg_basebackup 中可能错误报告错误的问题 (Tom Lane)
之前的代码未能检查某些内核调用的错误, 并且在其他情况下可能报告错误的 errno 值。
修复 char( 列上 N)contrib/btree_gist 索引的仅索引扫描结果 (Tom Lane)
仅索引扫描返回的列值去除了尾部空格,这不是预期的行为。 这是因为数据就是以这种方式存储在索引中的。此修复更改代码以 使用预期的空格填充来存储 char( 值。 除非你执行 N)REINDEX,否则此类索引的行为不会立即改变; 在更新过程中,去除空格的值将逐渐被替换。 不使用仅索引扫描计划的查询在任何情况下都不受影响。
更改 configure 以使用 Python 的 sysconfig 模块代替已弃用的 distutils 模块来确定如何构建 PL/Python (Peter Eisentraut,Tom Lane,Andres Freund)
对于 Python 3.10,这避免了在 configure 时出现关于 distutils 已弃用并计划在 Python 3.12 中移除的警告。想必一旦 3.12 发布, configure --with-python 将会完全失败。 这种面向未来的改进确实有一个代价:sysconfig 在 Python 2.7 之前不存在,在 Python 3 分支中在 3.2 之前也不存在, 因此不再可能针对早已停止维护的 Python 版本构建 PL/Python。
修复在 Windows 上使用 Perl 5.28 及更高版本时的 PL/Perl 编译失败 (Victor Wagner)
修复在 Python 3.11 及更高版本上的 PL/Python 编译失败 (Peter Eisentraut)
增加对使用 Visual Studio 2022 构建的支持(Hans Buschmann)
允许 MSVC 构建系统中的 .bat 包装脚本 无需先切换到其所在目录即可调用 (Anton Voloshin,Andrew Dunstan)