文档版本比较
POSTGRESQL · VERSION COMPARE
PostgreSQL 14.2 发布变化
此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。
包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。
从数据库输出识别起始版本
完整发布变化
14.2
2022-02-10
14.2stable支持截止 2026-11-12
PostgreSQL 14.2
迁移与兼容性
对于运行 14.X 的用户,不需要执行导出/恢复。
但是,已发现了一些可能导致索引损坏的错误,如前两个变更日志条目所述。如果存在上述任一情况,建议在更新后重建可能受影响的索引。
此外,如果是从早于 14.1 的版本升级,请参见第 E.24 节。
改进对 TOAST 表更新强制使用标准锁定协议,以防止 REINDEX CONCURRENTLY 出现问题
变更
对 TOAST 表更新强制使用标准锁定协议,以防止 REINDEX CONCURRENTLY 出现问题(Michael Paquier)§
如果对 TOAST 表或 TOAST 表的索引应用 REINDEX CONCURRENTLY,往往会产生损坏的索引。这是因为更新 TOAST 条目的会话立即释放了其 ROW EXCLUSIVE 锁,而不是像其他所有更新那样持有到事务提交。修复方法是使 TOAST 更新按照正常规则持有表锁。任何已损坏的索引都可以通过重建索引来修复。
问题修复修复在页内剪枝期间 RECENTLY_DEAD 元组变为完全 DEAD 状态时 HOT 链的损坏
变更
修复在页内剪枝期间 RECENTLY_DEAD 元组变为完全 DEAD 状态时 HOT 链的损坏(Andres Freund)§
VACUUM 有可能在留下指向它的重定向项的同时移除了最近死亡的元组。当该元组的项槽位后来被某个新元组重用时,该新元组会被视为已有 HOT 链的一部分,造成一种索引损坏。如果发生了这种情况,重建表的索引应该可以修复损坏。但是,这是一种发生概率极低的场景,因此我们不建议仅凭可能发生就进行重新索引。
问题修复修复对具有本地分区和外部分区混合的表进行 EvalPlanQual 重新检查时的崩溃
问题修复修复 COPY TO 中的悬空指针
变更
修复 COPY TO 中的悬空指针(Bharath Rupireddy)§
这一疏忽可能导致在 COPY 出错后出现不正确的错误消息或崩溃。
问题修复避免在统计对象被并发删除时 ALTER STATISTICS 出现空指针崩溃
变更
避免在统计对象被并发删除时 ALTER STATISTICS 出现空指针崩溃(Tomas Vondra)§
改进正确处理从多范围中提取范围时的对齐填充
变更
正确处理从多范围中提取范围时的对齐填充(Alexander Korotkov)§
这一错误可能在处理可变长度数据类型上的多范围时导致崩溃。
问题修复修复对匿名 RECORD 数据类型过于乐观地使用 hash 的问题
变更
修复对匿名 RECORD 数据类型过于乐观地使用 hash 的问题(Tom Lane)§
这防止了某些情况下出现的 “could not identify a hash function for type record” 错误。
问题修复修复并行单子节点 Append 节点的不正确计划创建
变更
修复并行单子节点 Append 节点的不正确计划创建(David Rowley)§
在某些情况下,Append 在不应该被简化时被简化了,导致错误的查询结果(重复行)。
问题修复修复当并非所有索引列都可返回时的仅索引扫描计划
问题修复修复 Memoize 计划节点以处理使用来自 Memoize 上层参数的子计划
变更
修复 Memoize 计划节点以处理使用来自 Memoize 上层参数的子计划(David Rowley)§
问题修复修复 Memoize 计划节点以正确处理不支持 hash 运算的连接操作符
变更
修复 Memoize 计划节点以正确处理不支持 hash 运算的连接操作符(David Rowley)§
改进确保将类型转换到未指定的 typmod 时生成 RelabelType 节点而非长度强制函数调用
变更
确保将类型转换到未指定的 typmod 时生成 RelabelType 节点而非长度强制函数调用(Tom Lane)§
虽然强制函数应该做正确的事情(即什么都不做),但这种转换效率不必要地低下。
问题修复修复 anycompatible 系列数据类型匹配的检查
变更
修复 anycompatible 系列数据类型匹配的检查(Tom Lane)§
在某些情况下,解析器会认为具有 anycompatible 系列多态参数的函数或操作符匹配了一组实际上不应匹配的参数。在已报告的案例中,这导致对一个调用匹配了多个操作符,引发操作符歧义错误;但之后出现失败也是可能的。
关联记录 (1)
问题修复修复当数据库一致性恰好在 WAL 页面边界处达到时的 WAL 重放失败
变更
修复当数据库一致性恰好在 WAL 页面边界处达到时的 WAL 重放失败(Álvaro Herrera)§
问题修复修复物理副本的启动以容忍事务 ID 回卷
变更
修复物理副本的启动以容忍事务 ID 回卷(Abhijit Menon-Sen,Tomas Vondra)§
如果副本服务器在主库上的活跃事务集跨越回卷边界时启动(即有些较新的事务的 XID 比较旧的事务小),副本将因 “out-of-order XID insertion in KnownAssignedXids” 而失败。副本会重试,但永远无法越过该错误。
改进在逻辑复制中,避免重复传输子表的数据
变更
在逻辑复制中,避免重复传输子表的数据(Hou Zhijie)§
如果一个发布同时包含子表和父表,并且设置了 publish_via_partition_root 选项,订阅者会对子表和父表都无用地启动同步。确保在这种情况下只同步父表。
关联记录 (1)
改进移除在逻辑复制连接上发出的 SQL 命令的词法限制
改进确保在复制 ROLLBACK PREPARED 操作时设置复制源时间戳
变更
确保在复制 ROLLBACK PREPARED 操作时设置复制源时间戳(Masahiko Sawada)§
问题修复修复事务的最后一个子事务的提交时间戳可能丢失的问题
变更
修复事务的最后一个子事务的提交时间戳可能丢失的问题(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)§
并发会话未能更新其关于哪个索引是副本标识索引的判断,可能导致不正确的逻辑复制行为。
问题修复修复当索引列的数据类型与操作符类声明的输入类型二进制兼容时 SP-GiST 索引的失败
变更
修复当索引列的数据类型与操作符类声明的输入类型二进制兼容时 SP-GiST 索引的失败(Tom Lane)§
这种情况应该可以工作,但失败并显示 “compress method must be defined when leaf type is different from input type”。
改进允许在计算最旧 xmin 时忽略并行清理和并发索引构建
变更
允许在计算最旧 xmin 时忽略并行清理和并发索引构建(Masahiko Sawada)§
这些操作的非并行化实例已经被忽略了,但该逻辑对并行化的情况不起作用。推迟 xmin 范围会产生不良影响,例如延迟清理操作。
关联记录 (1)
问题修复修复更新表达式索引时的内存泄漏
变更
修复更新表达式索引时的内存泄漏(Peter Geoghegan)§
影响很多行的 UPDATE 可能会消耗大量内存。
问题修复避免在重新分配大量对象所有权的 REASSIGN OWNED BY 操作期间泄漏内存
变更
避免在重新分配大量对象所有权的 REASSIGN OWNED BY 操作期间泄漏内存(Justin Pryzby)§
性能通过避免不必要的缓存访问,改进 walsender 发送逻辑变更的性能
变更
通过避免不必要的缓存访问,改进 walsender 发送逻辑变更的性能(Hou Zhijie)§
问题修复修复 pg_hba_file_rules 视图中 cert 认证方法选项的显示
变更
修复 pg_hba_file_rules 视图中 cert 认证方法选项的显示(Magnus Hagander)§
cert 认证方法隐含 clientcert=verify-full,但 pg_hba_file_rules 视图错误地报告了 clientcert=verify-ca。
改进确保 pg_log_backend_memory_contexts() 所针对的会话仅将其结果发送到服务器日志
变更
确保 pg_log_backend_memory_contexts() 所针对的会话仅将其结果发送到服务器日志(Fujii Masao)§
之前,如果 client_min_messages 设置得足够高,日志消息也会被发送到已连接的客户端。由于该客户端并未请求该消息,这会令人惊讶(并且可能违反线路协议)。
问题修复修复出现在 INSERT ... VALUES 规则中的整行变量的显示
变更
修复出现在 INSERT ... VALUES 规则中的整行变量的显示(Tom Lane)§
整行变量会被打印为 “var.*”,但这允许在规则重新加载时将其展开为各个列,导致不同的语义。附加显式类型转换以防止这种情况,正如我们在其他地方所做的那样。
改进在反向列出 SQL 标准函数体时,在 INSERT ... SELECT 中适当显示函数参数
变更
在反向列出 SQL 标准函数体时,在 INSERT ... SELECT 中适当显示函数参数(Tom Lane)§
之前,即使参数有名称,它们也会显示为 $。N
问题修复修复对空字符串应用 Unicode 字符串规范化时的一字节缓冲区溢出
变更
修复对空字符串应用 Unicode 字符串规范化时的一字节缓冲区溢出(Michael Paquier)§
由于对齐的考虑,这在实际中的影响是有限的;但在调试构建中,会引发警告。
问题修复修复或移除一些不正确的断言
变更
问题修复修复在多线程使用 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 13.6 · 使 psql 的 \password 命令默认设置 CURRENT_USER 的密码,而非连接的原始用户名
- 相同变化PostgreSQL 12.10 · 使 psql 的 \password 命令默认设置 CURRENT_USER 的密码,而非连接的原始用户名
- 相同变化PostgreSQL 11.15 · 使 psql 的 \password 命令默认设置 CURRENT_USER 的密码,而非连接的原始用户名
- 相同变化PostgreSQL 10.20 · 使 psql 的 \password 命令默认设置 CURRENT_USER 的密码,而非连接的原始用户名
问题修复修复 psql \d 命令中用于识别父触发器的查询
变更
修复 psql \d 命令中用于识别父触发器的查询(Justin Pryzby)§
之前的代码在分区具有触发器且某个父分区表上存在同名的不相关语句级触发器时,会失败并显示 “more than one row returned by a subquery used as an expression”。
关联记录 (1)
改进使 psql 的 \d 命令按名称而非 OID 排序表的扩展统计对象
变更
使 psql 的 \d 命令按名称而非 OID 排序表的扩展统计对象(Justin Pryzby)§
问题修复修复 psql 对枚举类型标签值的 Tab 补全
问题修复修复在 Windows 上使用终端作为数据源或目标时的失败
改进在 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,否则此类索引的行为不会立即改变;在更新过程中,去除空格的值将逐渐被替换。不使用仅索引扫描计划的查询在任何情况下都不受影响。
问题修复修复 postgres_fdw 处理异步查询时的边界情况
改进更改 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 13.6 · 更改 configure 以使用 Python 的 sysconfig 模块代替已弃用的 distutils 模块来确定如何构建 PL/Python
- 相同变化PostgreSQL 12.10 · 更改 configure 以使用 Python 的 sysconfig 模块代替已弃用的 distutils 模块来确定如何构建 PL/Python
- 相同变化PostgreSQL 11.15 · 更改 configure 以使用 Python 的 sysconfig 模块代替已弃用的 distutils 模块来确定如何构建 PL/Python
- 相同变化PostgreSQL 10.20 · 更改 configure 以使用 Python 的 sysconfig 模块代替已弃用的 distutils 模块来确定如何构建 PL/Python
改进重新允许在没有 OpenSSL 的情况下进行交叉编译
变更
重新允许在没有 OpenSSL 的情况下进行交叉编译(Tom Lane)§
configure 应该假定目标系统上有 /dev/urandom 可用,但实际上却失败了。
问题修复修复在 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.