文档版本比较
POSTGRESQL · VERSION COMPARE
PostgreSQL 12.10 发布变化
此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。
包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。
从数据库输出识别起始版本
完整发布变化
12.10
2022-02-10
12.10stable支持截止 2024-11-21
PostgreSQL 12.10
迁移与兼容性
对于运行 12.X 的用户,不需要执行导出/恢复。
但是,如果曾对 TOAST 表的索引执行 REINDEX CONCURRENTLY,或者发现无法访问 TOAST 数据,请参阅下方变更记录中的第一项。
此外,如果是从早于 12.9 的版本升级,请参见第 E.14 节。
改进对 TOAST 表更新强制使用标准锁定协议,以防止 REINDEX CONCURRENTLY 出现问题
变更
对 TOAST 表更新强制使用标准锁定协议,以防止 REINDEX CONCURRENTLY 出现问题(Michael Paquier)§
如果对 TOAST 表或 TOAST 表的索引应用 REINDEX CONCURRENTLY,往往会产生损坏的索引。这是因为更新 TOAST 条目的会话立即释放了其 ROW EXCLUSIVE 锁,而不是像其他所有更新那样持有到事务提交。修复方法是使 TOAST 更新按照正常规则持有表锁。任何已损坏的索引都可以通过重建索引来修复。
问题修复修复并行单子节点 Append 节点的不正确计划创建
变更
修复并行单子节点 Append 节点的不正确计划创建(David Rowley)§
在某些情况下,Append 在不应该被简化时被简化了,导致错误的查询结果(重复行)。
问题修复修复当并非所有索引列都可返回时的仅索引扫描计划
改进确保将类型转换到未指定的 typmod 时生成 RelabelType 节点而非长度强制函数调用
变更
确保将类型转换到未指定的 typmod 时生成 RelabelType 节点而非长度强制函数调用(Tom Lane)§
虽然强制函数应该做正确的事情(即什么都不做),但这种转换效率不必要地低下。
问题修复修复当数据库一致性恰好在 WAL 页面边界处达到时的 WAL 重放失败
变更
修复当数据库一致性恰好在 WAL 页面边界处达到时的 WAL 重放失败(Álvaro Herrera)§
问题修复修复物理副本的启动以容忍事务 ID 回卷
变更
修复物理副本的启动以容忍事务 ID 回卷(Abhijit Menon-Sen,Tomas Vondra)§
如果副本服务器在主库上的活跃事务集跨越回卷边界时启动(即有些较新的事务的 XID 比较旧的事务小),副本将因 “out-of-order XID insertion in KnownAssignedXids” 而失败。副本会重试,但永远无法越过该错误。
改进移除在逻辑复制连接上发出的 SQL 命令的词法限制
问题修复修复事务的最后一个子事务的提交时间戳可能丢失的问题
变更
修复事务的最后一个子事务的提交时间戳可能丢失的问题(Alex Kingsborough,Kyotaro Horiguchi)§
改进确保在检查点期间对 pg_logical/mappings 子目录执行 fsync
变更
确保在检查点期间对 pg_logical/mappings 子目录执行 fsync(Nathan Bossart)§
在某些文件系统上,这一疏忽可能导致在系统崩溃后丢失逻辑重写状态文件。
改进为分区表构建扩展统计信息
变更
为分区表构建扩展统计信息(Justin Pryzby)§
之前的一个错误修复禁用了为旧式继承树构建扩展统计信息,但它也阻止了为分区表构建这些统计信息,这是一个不必要的限制。此变更允许 ANALYZE 计算分区表的统计对象的值。(但请注意,自动清理本身不处理分区表,因此如果需要维护此类统计信息,必须定期对分区表发出手动 ANALYZE。)
改进忽略继承树的扩展统计信息
变更
忽略继承树的扩展统计信息(Justin Pryzby)§
目前,扩展统计信息的值只是针对每个表本地计算的,而不是针对整个继承树。但是,在规划跨继承树的查询时,这些值被错误地参考了,可能导致比默认估计更差的结果。
改进当分区表的行类型在其他地方被用作复合类型时,禁止修改其列的数据类型
变更
当分区表的行类型在其他地方被用作复合类型时,禁止修改其列的数据类型(Tom Lane)§
这一限制对于普通表早已存在,但由于疏忽,对分区表未做检查。
改进禁止对作为副本标识索引一部分的列执行 ALTER TABLE ... DROP NOT NULL
变更
禁止对作为副本标识索引一部分的列执行 ALTER TABLE ... DROP NOT NULL(Haiying Tang,Hou Zhijie)§
对于主键索引已经存在相同的禁止规则。
改进在 ALTER TABLE ADD PRIMARY KEY USING INDEX 期间正确更新缓存的表状态
变更
在 ALTER TABLE ADD PRIMARY KEY USING INDEX 期间正确更新缓存的表状态(Hou Zhijie)§
并发会话未能更新其关于表是否具有主键的判断,可能导致不正确的逻辑复制行为。
改进在切换 REPLICA IDENTITY 索引时正确更新缓存的表状态
变更
在切换 REPLICA IDENTITY 索引时正确更新缓存的表状态(Tang Haiying,Hou Zhijie)§
并发会话未能更新其关于哪个索引是副本标识索引的判断,可能导致不正确的逻辑复制行为。
问题修复避免在重新分配大量对象所有权的 REASSIGN OWNED BY 操作期间泄漏内存
变更
避免在重新分配大量对象所有权的 REASSIGN OWNED BY 操作期间泄漏内存(Justin Pryzby)§
问题修复修复 pg_hba_file_rules 视图中 cert 认证方法选项的显示
变更
修复 pg_hba_file_rules 视图中 cert 认证方法选项的显示(Magnus Hagander)§
cert 认证方法隐含 clientcert=verify-full,但 pg_hba_file_rules 视图错误地报告了 clientcert=verify-ca。
问题修复修复出现在 INSERT ... VALUES 规则中的整行变量的显示
变更
修复出现在 INSERT ... VALUES 规则中的整行变量的显示(Tom Lane)§
整行变量会被打印为 “var.*”,但这允许在规则重新加载时将其展开为各个列,导致不同的语义。附加显式类型转换以防止这种情况,正如我们在其他地方所做的那样。
问题修复修复或移除一些不正确的断言
变更
问题修复修复在多线程使用 libpq 或 ecpglib 早期报告的错误消息本地化失败的竞态条件
变更
修复在多线程使用 libpq 或 ecpglib 早期报告的错误消息本地化失败的竞态条件(Tom Lane)§
改进避免从 libpq 的 PQcancel 函数中调用 strerror
变更
避免从 libpq 的 PQcancel 函数中调用 strerror(Tom Lane)§
PQcancel 应该可以安全地从信号处理程序中调用,但 strerror 不是安全的。这一错误用法仅在向服务器发送取消消息失败的不太可能的情况下才会发生,这也许解释了为什么没有相关报告。
改进使 psql 的 \password 命令默认设置 CURRENT_USER 的密码,而非连接的原始用户名
变更
使 psql 的 \password 命令默认设置 CURRENT_USER 的密码,而非连接的原始用户名(Tom Lane)§
这与文档中描述的行为一致,并且避免了在会话开始后执行了 SET ROLE 或 SET SESSION AUTHORIZATION 时可能出现的权限失败。为防止混淆,现在密码提示中包含了要操作的角色名称。
关联记录 (4)
- 相同变化PostgreSQL 14.2 · 使 psql 的 \password 命令默认设置 CURRENT_USER 的密码,而非连接的原始用户名
- 相同变化PostgreSQL 13.6 · 使 psql 的 \password 命令默认设置 CURRENT_USER 的密码,而非连接的原始用户名
- 相同变化PostgreSQL 11.15 · 使 psql 的 \password 命令默认设置 CURRENT_USER 的密码,而非连接的原始用户名
- 相同变化PostgreSQL 10.20 · 使 psql 的 \password 命令默认设置 CURRENT_USER 的密码,而非连接的原始用户名
改进在 psql 和其他一些客户端程序中,避免在 Ctrl-C 信号处理程序中尝试调用 gettext()
变更
在 psql 和其他一些客户端程序中,避免在 Ctrl-C 信号处理程序中尝试调用 gettext()(Tom Lane)§
虽然没有已报告的失败可追溯到此错误,但这样做几乎不可能是安全的。
关联记录 (4)
改进允许取消 pg_receivewal 和 pg_recvlogical 中的初始密码提示
变更
允许取消 pg_receivewal 和 pg_recvlogical 中的初始密码提示(Tom Lane,Nathan Bossart)§
之前在这些程序提示输入密码时无法通过 Ctrl-C 终止它们。
问题修复修复 pg_dump 对用户定义类型转换的转储顺序
变更
修复 pg_dump 对用户定义类型转换的转储顺序(Tom Lane)§
在极少数情况下,输出脚本可能在用户定义类型转换被创建之前就引用了它。
问题修复修复 pg_dump 的 --inserts 和 --column-inserts 模式以处理同时包含生成列和已删除列的表
变更
问题修复修复 pg_dump 和 pg_basebackup 中可能错误报告错误的问题
变更
问题修复修复 char(N) 列上 contrib/btree_gist 索引的仅索引扫描结果
变更
修复 char( 列上 N)contrib/btree_gist 索引的仅索引扫描结果(Tom Lane)§
仅索引扫描返回的列值去除了尾部空格,这不是预期的行为。这是因为数据就是以这种方式存储在索引中的。此修复更改代码以使用预期的空格填充来存储 char( 值。除非你执行 N)REINDEX,否则此类索引的行为不会立即改变;在更新过程中,去除空格的值将逐渐被替换。不使用仅索引扫描计划的查询在任何情况下都不受影响。
改进更改 configure 以使用 Python 的 sysconfig 模块代替已弃用的 distutils 模块来确定如何构建 PL/Python
变更
更改 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。
关联记录 (4)
- 相同变化PostgreSQL 14.2 · 更改 configure 以使用 Python 的 sysconfig 模块代替已弃用的 distutils 模块来确定如何构建 PL/Python
- 相同变化PostgreSQL 13.6 · 更改 configure 以使用 Python 的 sysconfig 模块代替已弃用的 distutils 模块来确定如何构建 PL/Python
- 相同变化PostgreSQL 11.15 · 更改 configure 以使用 Python 的 sysconfig 模块代替已弃用的 distutils 模块来确定如何构建 PL/Python
- 相同变化PostgreSQL 10.20 · 更改 configure 以使用 Python 的 sysconfig 模块代替已弃用的 distutils 模块来确定如何构建 PL/Python
问题修复修复在 Windows 上使用 Perl 5.28 及更高版本时的 PL/Perl 编译失败
变更
修复在 Windows 上使用 Perl 5.28 及更高版本时的 PL/Perl 编译失败(Victor Wagner)§
问题修复修复在 Python 3.11 及更高版本上的 PL/Python 编译失败
变更
修复在 Python 3.11 及更高版本上的 PL/Python 编译失败(Peter Eisentraut)§
改进增加对使用 Visual Studio 2022 构建的支持
变更
增加对使用 Visual Studio 2022 构建的支持(Hans Buschmann)§
改进允许 MSVC 构建系统中的 .bat 包装脚本无需先切换到其所在目录即可调用
变更
没有匹配的变化
尝试其他关键词,或 .
如何生成比较结果?
比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。
发布快照: 2026-09-26 · 安全快照: 2026-09-26
内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.