文档版本比较
POSTGRESQL · VERSION COMPARE
PostgreSQL 12.1 发布变化
此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。
包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。
从数据库输出识别起始版本
完整发布变化
12.1
2019-11-14
12.1stable支持截止 2024-11-21
PostgreSQL 12.1
迁移与兼容性
对于运行 12.X 的用户,不需要执行导出/恢复。
问题修复修复 ALTER TABLE 添加没有默认值的列,同时进行需要重写表的其他更改时发生的崩溃
问题修复修复 REINDEX CONCURRENTLY 中的锁处理
问题修复避免报告 CREATE INDEX CONCURRENTLY 或 REINDEX CONCURRENTLY 命令的进度时因竞争条件而发生的崩溃
变更
避免报告 CREATE INDEX CONCURRENTLY 或 REINDEX CONCURRENTLY 命令的进度时因竞争条件而发生的崩溃(Álvaro Herrera)§
改进避免在 REINDEX CONCURRENTLY 期间创建重复的依赖条目
变更
避免在 REINDEX CONCURRENTLY 期间创建重复的依赖条目(Michael Paquier)§
此缺陷导致 pg_depend 膨胀,但没有更严重的后果。
改进防止 VACUUM 尝试冻结涉及仍在运行事务的旧 multixact ID
变更
防止 VACUUM 尝试冻结涉及仍在运行事务的旧 multixact ID(Nathan Bossart,Jeremy Schneider)§
这种情况会导致 VACUUM 一直失败,直到旧事务终止。
问题修复修复尝试按表达式索引执行 CLUSTER 时发生的 “wrong type of slot” 错误
变更
修复尝试按表达式索引执行 CLUSTER 时发生的 “wrong type of slot” 错误(Andres Freund)§
改进SET CONSTRAINTS ... DEFERRED 在分区表上执行失败,错误地报告缺少触发器
变更
SET CONSTRAINTS ... DEFERRED 在分区表上执行失败,错误地报告缺少触发器(Álvaro Herrera)§
问题修复修复父分区表包含已删除列时为分区创建索引发生的失败
问题修复修复对分区表中已索引列的删除
改进确保分区索引在并发重建失败后仍可被删除
变更
确保分区索引在并发重建失败后仍可被删除(Michael Paquier)§
这种情况下,索引的 pg_class.relispartition 标志被留在了错误状态,导致 DROP INDEX 失败。
问题修复修复逐分区连接中对等价类成员的处理
变更
修复逐分区连接中对等价类成员的处理(Amit Langote)§
这一疏漏可能导致无法使用可行的逐分区连接计划,或发生 “could not find pathkey item to sort” 规划器失败。
改进确保处理查询表达式时也处理 WINDOW 子句中的偏移量表达式
变更
确保处理查询表达式时也处理 WINDOW 子句中的偏移量表达式(Andrew Gierth)§
当偏移量是较复杂的表达式时,这一疏漏可能导致各种失败。例如,如果函数被内联,此类表达式中的函数参数引用就会失败。
改进避免 postmaster 子进程数组已无空闲槽位时,并行查询请求后台工作进程导致 postmaster 失败
变更
避免 postmaster 子进程数组已无空闲槽位时,并行查询请求后台工作进程导致 postmaster 失败(Tom Lane)§
关联记录 (4)
- 相同变化PostgreSQL 11.6 · 避免 postmaster 子进程数组已无空闲槽位时,并行查询请求后台工作进程导致 postmaster 失败
- 相同变化PostgreSQL 10.11 · 避免 postmaster 子进程数组已无空闲槽位时,并行查询请求后台工作进程导致 postmaster 失败
- 相同变化PostgreSQL 9.6.16 · 避免并行查询在没有空闲 postmaster 子进程数组槽位时请求后台工作者导致 postmaster 失败
- 相同变化PostgreSQL 9.5.20 · 避免并行查询在没有空闲 postmaster 子进程数组槽位时请求后台工作者导致 postmaster 失败
问题修复修复对带有 BEFORE UPDATE 触发器的表进行 EvalPlanQual 复检所引发的崩溃
变更
修复对带有 BEFORE UPDATE 触发器的表进行 EvalPlanQual 复检所引发的崩溃(Andres Freund)§
问题修复修复查询尝试访问 TOAST 表时发生的 “unexpected relkind” 错误
变更
修复查询尝试访问 TOAST 表时发生的 “unexpected relkind” 错误(John Hsu,Michael Paquier,Tom Lane)§
错误应说明权限被拒绝,但代码重构破坏了这种情况的处理。
改进在并行工作进程启动期间设置 GUC 参数发生错误时,提供相关的错误上下文行
变更
在并行工作进程启动期间设置 GUC 参数发生错误时,提供相关的错误上下文行(Thomas Munro)§
改进确保仅对以读写模式打开的文件应用 fsync()
改进允许编码转换成功处理比以前更长的字符串
变更
允许编码转换成功处理比以前更长的字符串(Álvaro Herrera,Tom Lane)§
以前,输入字符串有 0.25GB 的硬性上限;现在,只要转换后的输出不超过 1GB,就能够成功转换。
改进避免为窗口函数创建不必要地庞大的元组存储
变更
避免为窗口函数创建不必要地庞大的元组存储(Andrew Gierth)§
在某些情况下,元组存储会包含源表的所有列,而非仅包含查询所需的列。
改进允许 repalloc() 在大型内存块缩小时归还空间
变更
允许 repalloc() 在大型内存块缩小时归还空间(Tom Lane)§
改进确保归档恢复结束时删除临时 WAL 文件和历史文件
变更
确保归档恢复结束时删除临时 WAL 文件和历史文件(Sawada Masahiko)§
改进避免启用 recovery_min_apply_delay 时归档恢复发生失败
变更
避免启用 recovery_min_apply_delay 时归档恢复发生失败(Fujii Masao)§
recovery_min_apply_delay 通常不用于这种配置,但它应该能够正常工作。
关联记录 (5)
- 相同变化PostgreSQL 11.6 · 避免启用 recovery_min_apply_delay 时归档恢复发生失败
- 相同变化PostgreSQL 10.11 · 避免启用 recovery_min_apply_delay 时归档恢复发生失败
- 相同变化PostgreSQL 9.6.16 · 避免启用 recovery_min_apply_delay 时归档恢复的失败
- 相同变化PostgreSQL 9.5.20 · 避免启用 recovery_min_apply_delay 时归档恢复的失败
- 相同变化PostgreSQL 9.4.25 · 避免启用 recovery_min_apply_delay 时归档恢复的失败
改进在崩溃恢复期间忽略 restore_command、recovery_end_command 和 recovery_min_apply_delay 设置
问题修复修复发布者和订阅者对表的复制标识列认定不一致时逻辑复制发生的失败
改进避免逻辑复制 WAL 发送进程关闭期间出现不必要的延迟
变更
避免逻辑复制 WAL 发送进程关闭期间出现不必要的延迟(Craig Ringer,Álvaro Herrera)§
问题修复修复逻辑复制 WAL 接收进程进程中的超时处理
变更
修复逻辑复制 WAL 接收进程进程中的超时处理(Julien Rouhaud)§
错误的逻辑导致 wal_receiver_timeout 在逻辑复制部署中无法生效。
改进为逻辑解码的复制消息正确添加时间戳
变更
为逻辑解码的复制消息正确添加时间戳(Jeff Janes)§
例如,这一疏漏导致 pg_stat_subscription.last_msg_send_time 通常显示为 NULL。
问题修复修复后端进程此前曾等待同步复制时,在退出期间发生的竞争条件
变更
修复后端进程此前曾等待同步复制时,在退出期间发生的竞争条件(Dongming Liu)§
改进避免在使用 PAM 认证时记录有关已放弃连接的报错消息
变更
避免在使用 PAM 认证时记录有关已放弃连接的报错消息(Tom Lane)§
基于 libpq 的客户端在需要密码时通常会尝试连接两次,因为它们直到第一次连接尝试失败后才会提示用户输入密码。因此,服务器在客户端收到密码请求后关闭连接时,不会生成无用的日志消息。然而,PAM 认证代码没有遵循这一约定,会为实际上并未发生的认证失败生成多条消息。
问题修复修复 bitshiftright() 的错误行为
问题修复修复搜索字符串为空时,文本 position() 函数(也称为 strpos())的结果
变更
修复搜索字符串为空时,文本 position() 函数(也称为 strpos())的结果(Tom Lane)§
按历史行为和 SQL 标准,这种情况下结果应为一,但 12.0 返回了零。
问题修复修复对间隔乘法中边界情况下整数溢出的检测
变更
修复对间隔乘法中边界情况下整数溢出的检测(Yuya Watari)§
问题修复避免 ispell 文本检索词典包含错误的词缀数据时发生崩溃
变更
问题修复避免清理 GiST 索引时发生内存泄漏
变更
避免清理 GiST 索引时发生内存泄漏(Dilip Kumar)§
改进在 Windows 上,识别 “Norwegian (Bokmål)” 区域设置名称的更多拼写形式
变更
在 Windows 上,识别 “Norwegian (Bokmål)” 区域设置名称的更多拼写形式(Tom Lane)§
关联记录 (5)
- 相同变化PostgreSQL 11.6 · 在 Windows 上,识别 “Norwegian (Bokmål)” 区域设置名称的更多拼写形式
- 相同变化PostgreSQL 10.11 · 在 Windows 上,识别 “Norwegian (Bokmål)” 区域设置名称的更多拼写形式
- 相同变化PostgreSQL 9.6.16 · 在 Windows 上,识别 “Norwegian (Bokmål)” 区域名的更多拼法
- 相同变化PostgreSQL 9.5.20 · 在 Windows 上,识别 “Norwegian (Bokmål)” 区域名的更多拼法
- 相同变化PostgreSQL 9.4.25 · 在 Windows 上,识别 “Norwegian (Bokmål)” 区域名的更多拼法
问题修复修复 libpq,使其允许整数参数的字符串值包含尾部空白
改进在 libpq 中,因 connect_timeout 参数值语法无效而失败后,正确报告 CONNECTION_BAD 连接状态
变更
在 libpq 中,因 connect_timeout 参数值语法无效而失败后,正确报告 CONNECTION_BAD 连接状态(Lars Kanis)§
改进避免 ECPG 客户端在定义了 ENABLE_NLS 的情况下包含 ecpglib.h 时编译失败
变更
避免 ECPG 客户端在定义了 ENABLE_NLS 的情况下包含 ecpglib.h 时编译失败(Tom Lane)§
这种风险由位置不当的声明造成:ecpg_gettext() 不应对客户端代码可见。
关联记录 (5)
- 相同变化PostgreSQL 11.6 · 避免 ECPG 客户端在定义了 ENABLE_NLS 的情况下包含 ecpglib.h 时编译失败
- 相同变化PostgreSQL 10.11 · 避免 ECPG 客户端在定义了 ENABLE_NLS 的情况下包含 ecpglib.h 时编译失败
- 相同变化PostgreSQL 9.6.16 · 避免 ECPG 客户端在定义了 ENABLE_NLS 的情况下包含 ecpglib.h 时编译失败
- 相同变化PostgreSQL 9.5.20 · 避免 ECPG 客户端在定义了 ENABLE_NLS 的情况下包含 ecpglib.h 时编译失败
- 相同变化PostgreSQL 9.4.25 · 避免 ECPG 客户端在定义了 ENABLE_NLS 的情况下包含 ecpglib.h 时编译失败
问题修复修复分区表上外键约束的并行恢复调度
变更
修复分区表上外键约束的并行恢复调度(Álvaro Herrera)§
pg_dump 未能输出分区表外键的完整依赖信息。这可能让并行 pg_restore 过早地尝试重新创建外键约束。
改进在 pg_dump 中,确保名称相似的触发器和行级安全策略对象的输出顺序稳定
变更
在 pg_dump 中,确保名称相似的触发器和行级安全策略对象的输出顺序稳定(Benjie Gillam)§
以前,如果不同表上的两个触发器同名,它们会按 OID 排序,这不如按表名排序合适。RLS 策略也存在同样的问题。
关联记录 (5)
改进在 pg_upgrade 中拒绝包含 sql_identifier 类型列的表,因为该类型在版本 12 中更改了表示形式
改进改进 pg_upgrade 对使用了表示形式已变更的数据类型(如 line)的检查
变更
改进 pg_upgrade 对使用了表示形式已变更的数据类型(如 line)的检查(Tomas Vondra)§ §
当所关注的数据类型是某个已存储域类型或复合类型列的底层类型时,以前的代码可能漏检。
关联记录 (5)
- 相同变化PostgreSQL 11.6 · 改进 pg_upgrade 对使用了表示形式已变更的数据类型(如 line)的检查
- 相同变化PostgreSQL 10.11 · 改进 pg_upgrade 对使用了表示形式已变更的数据类型(如 line)的检查
- 相同变化PostgreSQL 9.6.16 · 改进 pg_upgrade 对使用表示已更改的数据类型(如 line)的检查
- 相同变化PostgreSQL 9.5.20 · 改进 pg_upgrade 对使用表示已更改的数据类型(如 line)的检查
- 相同变化PostgreSQL 9.4.25 · 改进 pg_upgrade 对使用表示已更改的数据类型(如 line)的检查
改进在带有 --dry-run 选项的 pg_rewind 中,避免更新 pg_control
变更
在带有 --dry-run 选项的 pg_rewind 中,避免更新 pg_control(Alexey Kondratov)§
这可能导致之后的 pg_rewind 尝试失败。
问题修复修复使用 -s 选项时,延续的 WAL 记录恰好在页面边界处结束导致 pg_waldump 失败的问题
变更
修复使用 -s 选项时,延续的 WAL 记录恰好在页面边界处结束导致 pg_waldump 失败的问题(Andrey Lepikhov)§
关联记录 (5)
- 相同变化PostgreSQL 11.6 · 修复使用 -s 选项时,延续的 WAL 记录恰好在页面边界处结束导致 pg_waldump 失败的问题
- 相同变化PostgreSQL 10.11 · 修复使用 -s 选项时,延续的 WAL 记录恰好在页面边界处结束导致 pg_waldump 失败的问题
- 相同变化PostgreSQL 9.6.16 · 修复 pg_waldump 使用 -s 选项且延续 WAL 记录恰好在页边界结束时失败的问题
- 相同变化PostgreSQL 9.5.20 · 修复 pg_waldump 使用 -s 选项且延续 WAL 记录恰好在页边界结束时失败的问题
- 相同变化PostgreSQL 9.4.25 · 修复 pg_waldump 使用 -s 选项且延续 WAL 记录恰好在页边界结束时失败的问题
改进在使用 --bkp-details 选项的 pg_waldump 中,避免为涉及整页写入的 WAL 记录输出多余换行
变更
在使用 --bkp-details 选项的 pg_waldump 中,避免为涉及整页写入的 WAL 记录输出多余换行(Andres Freund)§
关联记录 (4)
- 相同变化PostgreSQL 11.6 · 在使用 --bkp-details 选项的 pg_waldump 中,避免为涉及整页写入的 WAL 记录输出多余换行
- 相同变化PostgreSQL 10.11 · 在使用 --bkp-details 选项的 pg_waldump 中,避免为涉及整页写入的 WAL 记录输出多余换行
- 相同变化PostgreSQL 9.6.16 · 在 pg_waldump 使用 --bkp-details 选项时,避免为涉及整页写入的 WAL 记录输出多余换行
- 相同变化PostgreSQL 9.5.20 · 在 pg_waldump 使用 --bkp-details 选项时,避免为涉及整页写入的 WAL 记录输出多余换行
问题修复修复 pg_waldump 中少量的内存泄漏
变更
修复 pg_waldump 中少量的内存泄漏(Andres Freund)§
改进恢复将 pqsignal() 作为 libpq 的导出符号
变更
恢复将 pqsignal() 作为 libpq 的导出符号(Tom Lane)§
此前移除此函数的理由是客户端都不应使用它,但事实证明,这会使很旧版本的 psql 无法使用当前的 libpq,也可能影响其他应用。
问题修复修复 configure 对 libperl 是否存在的测试,使其适用于近期的 Red Hat 发行版
变更
关联记录 (5)
- 相同变化PostgreSQL 11.6 · 修复 configure 对 libperl 是否存在的测试,使其适用于近期的 Red Hat 发行版
- 相同变化PostgreSQL 10.11 · 修复 configure 对 libperl 是否存在的测试,使其适用于近期的 Red Hat 发行版
- 相同变化PostgreSQL 9.6.16 · 修复 configure 的 libperl 存在性测试,使其在最近的 Red Hat 版本上工作
- 相同变化PostgreSQL 9.5.20 · 修复 configure 的 libperl 存在性测试,使其在最近的 Red Hat 版本上工作
- 相同变化PostgreSQL 9.4.25 · 修复 configure 的 libperl 存在性测试,使其在最近的 Red Hat 版本上工作
问题修复确保为 PowerPC 上的自旋锁生成正确的代码
变更
确保为 PowerPC 上的自旋锁生成正确的代码(Noah Misch)§
以前的自旋锁代码允许编译器为不接受零号寄存器的汇编指令选择该寄存器,导致构建失败。我们仅见过一份很久以前的报告与此缺陷吻合,但它可能给尝试构建修改过的 PostgreSQL 代码或使用非常规编译器选项的用户带来问题。
改进在 AIX 上不再使用编译器选项 -qsrcmsg
变更
在 AIX 上不再使用编译器选项 -qsrcmsg(Noah Misch)§
这避免了 xlc v16.1.0 的内部编译器错误,除了改变编译器错误消息的格式之外,几乎没有其他影响。
问题修复修复 MSVC 构建过程,使其能够处理 OpenSSL 文件路径中的空格
变更
修复 MSVC 构建过程,使其能够处理 OpenSSL 文件路径中的空格(Andrew Dunstan)§
没有匹配的变化
尝试其他关键词,或 .
如何生成比较结果?
比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。
发布快照: 2026-09-26 · 安全快照: 2026-09-26
内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.