↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档版本对比

POSTGRESQL · VERSION COMPARE

PostgreSQL 12.1 的版本变更

本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。

查看该版本全部变更
查看该版本全部变更

从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。

收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。

本次发布的全部变更

12.1

2019-11-14

导出 JSON
51项变更功能、修复与改进
1次版本发布按发行版本归档
0个 CVE本版说明中提及的漏洞编号

12.1 历史版本维护截止 2024-11-21

PostgreSQL 12.1

升级与兼容性说明

对于运行 12.X 的用户,不需要执行导出/恢复。

BUG 修复修复 ALTER TABLE 添加没有默认值的列,同时进行需要重写表的其他更改时发生的崩溃

变更

修复 ALTER TABLE 添加没有默认值的列,同时进行需要重写表的其他更改时发生的崩溃(Andres Freund)§ §

BUG 修复修复 REINDEX CONCURRENTLY 中的锁处理

变更

修复 REINDEX CONCURRENTLY 中的锁处理(Michael Paquier)§ §

REINDEX CONCURRENTLY 遗漏了对新索引版本获取会话级锁,可能允许其他会话过早地操作它。此外,如果查询取消或会话终止中断在不恰当的时刻到达,可能导致 REINDEX CONCURRENTLY 未能释放它所持有的会话级锁。

BUG 修复避免报告 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 一直失败,直到旧事务终止。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复尝试按表达式索引执行 CLUSTER 时发生的 “wrong type of slot” 错误

变更

修复尝试按表达式索引执行 CLUSTER 时发生的 “wrong type of slot” 错误(Andres Freund)§

其他改进SET CONSTRAINTS ... DEFERRED 在分区表上执行失败,错误地报告缺少触发器

变更

SET CONSTRAINTS ... DEFERRED 在分区表上执行失败,错误地报告缺少触发器(Álvaro Herrera)§

关联记录(1)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复父分区表包含已删除列时为分区创建索引发生的失败

变更

修复父分区表包含已删除列时为分区创建索引发生的失败(Michael Paquier)§

关联记录(1)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复对分区表中已索引列的删除

变更

修复对分区表中已索引列的删除(Amit Langote,Michael Paquier)§ §

以前,这可能失败并报告有关索引依赖关系的错误。正确行为应是自动删除这些索引。

其他改进确保分区索引在并发重建失败后仍可被删除

变更

确保分区索引在并发重建失败后仍可被删除(Michael Paquier)§

这种情况下,索引的 pg_class.relispartition 标志被留在了错误状态,导致 DROP INDEX 失败。

BUG 修复修复逐分区连接中对等价类成员的处理

变更

修复逐分区连接中对等价类成员的处理(Amit Langote)§

这一疏漏可能导致无法使用可行的逐分区连接计划,或发生 “could not find pathkey item to sort” 规划器失败。

其他改进确保处理查询表达式时也处理 WINDOW 子句中的偏移量表达式

变更

确保处理查询表达式时也处理 WINDOW 子句中的偏移量表达式(Andrew Gierth)§

当偏移量是较复杂的表达式时,这一疏漏可能导致各种失败。例如,如果函数被内联,此类表达式中的函数参数引用就会失败。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进避免 postmaster 子进程数组已无空闲槽位时,并行查询请求后台工作进程导致 postmaster 失败

变更

避免 postmaster 子进程数组已无空闲槽位时,并行查询请求后台工作进程导致 postmaster 失败(Tom Lane)§

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复对带有 BEFORE UPDATE 触发器的表进行 EvalPlanQual 复检所引发的崩溃

变更

修复对带有 BEFORE UPDATE 触发器的表进行 EvalPlanQual 复检所引发的崩溃(Andres Freund)§

BUG 修复修复查询尝试访问 TOAST 表时发生的 “unexpected relkind” 错误

变更

修复查询尝试访问 TOAST 表时发生的 “unexpected relkind” 错误(John Hsu,Michael Paquier,Tom Lane)§

错误应说明权限被拒绝,但代码重构破坏了这种情况的处理。

关联记录(1)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进在并行工作进程启动期间设置 GUC 参数发生错误时,提供相关的错误上下文行

变更

在并行工作进程启动期间设置 GUC 参数发生错误时,提供相关的错误上下文行(Thomas Munro)§

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进确保仅对以读写模式打开的文件应用 fsync()

变更

确保仅对以读写模式打开的文件应用 fsync()(Andres Freund,Michael Paquier)§ §

某些代码路径尝试在以只读方式打开文件后执行此操作,但在某些平台上,这会导致 “bad file descriptor” 或类似错误。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进允许编码转换成功处理比以前更长的字符串

变更

允许编码转换成功处理比以前更长的字符串(Álvaro Herrera,Tom Lane)§

以前,输入字符串有 0.25GB 的硬性上限;现在,只要转换后的输出不超过 1GB,就能够成功转换。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进避免为窗口函数创建不必要地庞大的元组存储

变更

避免为窗口函数创建不必要地庞大的元组存储(Andrew Gierth)§

在某些情况下,元组存储会包含源表的所有列,而非仅包含查询所需的列。

关联记录(3)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进允许 repalloc() 在大型内存块缩小时归还空间

变更

允许 repalloc() 在大型内存块缩小时归还空间(Tom Lane)§

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进确保归档恢复结束时删除临时 WAL 文件和历史文件

变更

确保归档恢复结束时删除临时 WAL 文件和历史文件(Sawada Masahiko)§

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进避免启用 recovery_min_apply_delay 时归档恢复发生失败

变更

避免启用 recovery_min_apply_delay 时归档恢复发生失败(Fujii Masao)§

recovery_min_apply_delay 通常不用于这种配置,但它应该能够正常工作。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进在崩溃恢复期间忽略 restore_command、recovery_end_command 和 recovery_min_apply_delay 设置

变更

在崩溃恢复期间忽略 restore_command、recovery_end_command 和 recovery_min_apply_delay 设置(Fujii Masao)§ §

现在这些设置可以在 postgresql.conf 中指定,因此可能在崩溃恢复期间被启用,但此时遵循这些设置并不合适。应忽略它们,直到崩溃恢复完成。

BUG 修复修复发布者和订阅者对表的复制标识列认定不一致时逻辑复制发生的失败

变更

修复发布者和订阅者对表的复制标识列认定不一致时逻辑复制发生的失败(Jehan-Guillaume de Rorthais,Peter Eisentraut)§ §

在订阅者上将发布者根本不存在的列声明为复制标识的一部分,会导致 “negative bitmapset member not allowed” 错误。

关联记录(2)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进避免逻辑复制 WAL 发送进程关闭期间出现不必要的延迟

变更

避免逻辑复制 WAL 发送进程关闭期间出现不必要的延迟(Craig Ringer,Álvaro Herrera)§

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复逻辑复制 WAL 接收进程进程中的超时处理

变更

修复逻辑复制 WAL 接收进程进程中的超时处理(Julien Rouhaud)§

错误的逻辑导致 wal_receiver_timeout 在逻辑复制部署中无法生效。

关联记录(2)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进为逻辑解码的复制消息正确添加时间戳

变更

为逻辑解码的复制消息正确添加时间戳(Jeff Janes)§

例如,这一疏漏导致 pg_stat_subscription.last_msg_send_time 通常显示为 NULL。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复后端进程此前曾等待同步复制时,在退出期间发生的竞争条件

变更

修复后端进程此前曾等待同步复制时,在退出期间发生的竞争条件(Dongming Liu)§

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进避免在使用 PAM 认证时记录有关已放弃连接的报错消息

变更

避免在使用 PAM 认证时记录有关已放弃连接的报错消息(Tom Lane)§

基于 libpq 的客户端在需要密码时通常会尝试连接两次,因为它们直到第一次连接尝试失败后才会提示用户输入密码。因此,服务器在客户端收到密码请求后关闭连接时,不会生成无用的日志消息。然而,PAM 认证代码没有遵循这一约定,会为实际上并未发生的认证失败生成多条消息。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 bitshiftright() 的错误行为

变更

修复 bitshiftright() 的错误行为(Tom Lane)§ §

当位串长度不是 8 的倍数时,位串右移操作符未能将结果最后一个字节中的填充空间清零。虽然大多数操作看不到这些填充位,但其中任何非零位都会导致意外的比较行为,因为位串比较预期这些额外的位始终为零,并未特意忽略它们。

如果由于将 bitshiftright() 的输出保存在表中而导致数据不一致,可以使用类似以下语句进行修复:

UPDATE mytab SET bitcol = ~(~bitcol) WHERE bitcol != ~(~bitcol);
关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复搜索字符串为空时,文本 position() 函数(也称为 strpos())的结果

变更

修复搜索字符串为空时,文本 position() 函数(也称为 strpos())的结果(Tom Lane)§

按历史行为和 SQL 标准,这种情况下结果应为一,但 12.0 返回了零。

BUG 修复修复对间隔乘法中边界情况下整数溢出的检测

变更

修复对间隔乘法中边界情况下整数溢出的检测(Yuya Watari)§

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复避免 ispell 文本检索词典包含错误的词缀数据时发生崩溃

变更

避免 ispell 文本检索词典包含错误的词缀数据时发生崩溃(Arthur Zakirov)§ §

关联记录(3)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复避免清理 GiST 索引时发生内存泄漏

变更

避免清理 GiST 索引时发生内存泄漏(Dilip Kumar)§

其他改进在 Windows 上,识别 “Norwegian (Bokmål)” 区域设置名称的更多拼写形式

变更

在 Windows 上,识别 “Norwegian (Bokmål)” 区域设置名称的更多拼写形式(Tom Lane)§

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 libpq,使其允许整数参数的字符串值包含尾部空白

变更

修复 libpq,使其允许整数参数的字符串值包含尾部空白(Michael Paquier)§ §

版本 12 加强了 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)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复分区表上外键约束的并行恢复调度

变更

修复分区表上外键约束的并行恢复调度(Álvaro Herrera)§

pg_dump 未能输出分区表外键的完整依赖信息。这可能让并行 pg_restore 过早地尝试重新创建外键约束。

其他改进在 pg_dump 中,确保名称相似的触发器和行级安全策略对象的输出顺序稳定

变更

在 pg_dump 中,确保名称相似的触发器和行级安全策略对象的输出顺序稳定(Benjie Gillam)§

以前,如果不同表上的两个触发器同名,它们会按 OID 排序,这不如按表名排序合适。RLS 策略也存在同样的问题。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进在 pg_upgrade 中拒绝包含 sql_identifier 类型列的表,因为该类型在版本 12 中更改了表示形式

变更

在 pg_upgrade 中拒绝包含 sql_identifier 类型列的表,因为该类型在版本 12 中更改了表示形式(Tomas Vondra)§ §

其他改进改进 pg_upgrade 对使用了表示形式已变更的数据类型(如 line)的检查

变更

改进 pg_upgrade 对使用了表示形式已变更的数据类型(如 line)的检查(Tomas Vondra)§ §

当所关注的数据类型是某个已存储域类型或复合类型列的底层类型时,以前的代码可能漏检。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进在带有 --dry-run 选项的 pg_rewind 中,避免更新 pg_control

变更

在带有 --dry-run 选项的 pg_rewind 中,避免更新 pg_control(Alexey Kondratov)§

这可能导致之后的 pg_rewind 尝试失败。

BUG 修复修复使用 -s 选项时,延续的 WAL 记录恰好在页面边界处结束导致 pg_waldump 失败的问题

变更

修复使用 -s 选项时,延续的 WAL 记录恰好在页面边界处结束导致 pg_waldump 失败的问题(Andrey Lepikhov)§

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进在使用 --bkp-details 选项的 pg_waldump 中,避免为涉及整页写入的 WAL 记录输出多余换行

变更

在使用 --bkp-details 选项的 pg_waldump 中,避免为涉及整页写入的 WAL 记录输出多余换行(Andres Freund)§

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 pg_waldump 中少量的内存泄漏

变更

修复 pg_waldump 中少量的内存泄漏(Andres Freund)§

关联记录(4)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进恢复将 pqsignal() 作为 libpq 的导出符号

变更

恢复将 pqsignal() 作为 libpq 的导出符号(Tom Lane)§

此前移除此函数的理由是客户端都不应使用它,但事实证明,这会使很旧版本的 psql 无法使用当前的 libpq,也可能影响其他应用。

BUG 修复修复 configure 对 libperl 是否存在的测试,使其适用于近期的 Red Hat 发行版

变更

修复 configure 对 libperl 是否存在的测试,使其适用于近期的 Red Hat 发行版(Tom Lane)§ §

以前,如果用户将 CFLAGS 设置为 -O0,此测试可能失败。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复确保为 PowerPC 上的自旋锁生成正确的代码

变更

确保为 PowerPC 上的自旋锁生成正确的代码(Noah Misch)§

以前的自旋锁代码允许编译器为不接受零号寄存器的汇编指令选择该寄存器,导致构建失败。我们仅见过一份很久以前的报告与此缺陷吻合,但它可能给尝试构建修改过的 PostgreSQL 代码或使用非常规编译器选项的用户带来问题。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

其他改进在 AIX 上不再使用编译器选项 -qsrcmsg

变更

在 AIX 上不再使用编译器选项 -qsrcmsg(Noah Misch)§

这避免了 xlc v16.1.0 的内部编译器错误,除了改变编译器错误消息的格式之外,几乎没有其他影响。

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

BUG 修复修复 MSVC 构建过程,使其能够处理 OpenSSL 文件路径中的空格

变更

修复 MSVC 构建过程,使其能够处理 OpenSSL 文件路径中的空格(Andrew Dunstan)§

关联记录(5)

“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。

这份对比如何生成?

对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。

条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。

同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。

CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。

交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。