文档版本比较
POSTGRESQL · VERSION COMPARE
PostgreSQL 13.3 发布变化
此版本的完整功能、修复与兼容性说明,以及其他版本的关联记录。
包括起始版本之后至目标版本的变化。大版本号表示该分支的首个版本。
从数据库输出识别起始版本
完整发布变化
13.3
2021-05-13
13.3stable支持截止 2025-11-13
安全变化
| CVE / 问题 | 严重程度 | 修复版本 | 所选版本状态 |
|---|---|---|---|
| CVE-2021-32029 修复涉及连接的跨分区更新中 UPDATE ... RETURNING 输出可能计算不正确的问题 | 13.3 | 已记录修复 | |
| CVE-2021-32028 修复 INSERT ... ON CONFLICT ... UPDATE 目标列表中对 “junk” 列的错误处理 | 13.3 | 已记录修复 | |
| CVE-2021-32027 防止数组下标计算中的整数溢出 | 13.3 | 已记录修复 |
PostgreSQL 13.3
迁移与兼容性
对于运行 13.X 的用户,不需要执行导出/恢复。
但是,如果是从早于 13.2 的版本升级,请参见第 E.22 节。
安全防止数组下标计算中的整数溢出
变更
防止数组下标计算中的整数溢出(Tom Lane)§
以前,当数组下界加上长度发生整数溢出时,数组代码不会报错。这会使数组中后面的项无法访问(因为它们的下标无法表示为整数),更重要的是还会干扰后续赋值操作。这可能造成内存覆盖,进而导致崩溃或非预期的数据修改。(CVE-2021-32027)
安全修复 INSERT ... ON CONFLICT ... UPDATE 目标列表中对 “junk” 列的错误处理
变更
修复 INSERT ... ON CONFLICT ... UPDATE 目标列表中对 “junk” 列的错误处理(Tom Lane)§
如果 UPDATE 列表包含任何多列子查询(它们除了产生正式结果外,还会产生 junk 列),UPDATE 路径最终会存储包含额外 junk 列值的元组。短期内这基本无害,但如果向表中添加新列,这些值就会变得可访问;如果它们与新增列的数据类型不匹配,就可能导致异常。
此外,在支持跨分区更新的版本中,由此类情况触发的跨分区更新存在相反的问题:junk 列被从目标列表中移除,通常会因多列子查询机制失效而立即崩溃。(CVE-2021-32028)
关联记录 (4)
- 相同变化PostgreSQL 12.7 · 修复 INSERT ... ON CONFLICT ... UPDATE 目标列表中对 “junk” 列的错误处理
- 相同变化PostgreSQL 11.12 · 修复 INSERT ... ON CONFLICT ... UPDATE 目标列表中对 “junk” 列的错误处理
- 相同变化PostgreSQL 10.17 · 修复 INSERT ... ON CONFLICT ... UPDATE 目标列表中对 “junk” 列的错误处理
- 相同变化PostgreSQL 9.6.22 · 修复 INSERT ... ON CONFLICT ... UPDATE 目标列表中“垃圾”列的处理不当
安全修复涉及连接的跨分区更新中 UPDATE ... RETURNING 输出可能计算不正确的问题
问题修复修复分区表中约束可延迟属性的调整
变更
修复分区表中约束可延迟属性的调整(Álvaro Herrera)§
对分区表的外键约束执行 ALTER TABLE ... ALTER CONSTRAINT 时,未能调整叶子分区的约束和触发器上的 DEFERRABLE 或 INITIALLY DEFERRED 标记。这导致此类约束产生非预期的行为。更新到此版本后,可以执行新的 ALTER 命令设置所需属性,从而修复行为异常的分区表。
此项修改还禁止直接对叶子分区的约束执行这样的 ALTER。唯一受支持的情况是整个分区层次结构具有相同的约束属性,因此此类 ALTER 必须在分区根表上执行。
改进使用 ALTER TABLE ... INHERIT 附加子表时,要求子表中与父表生成列对应的列以相同方式生成
变更
使用 ALTER TABLE ... INHERIT 附加子表时,要求子表中与父表生成列对应的列以相同方式生成(Peter Eisentraut)§
改进禁止将标识列标记为可空
变更
禁止将标识列标记为可空(Vik Fearing)§
GENERATED ... AS IDENTITY 隐含 NOT NULL,因此不允许将其与显式的 NULL 指定结合使用。
改进允许 ALTER ROLE/DATABASE ... SET 设置 role、session_authorization 和 temp_buffers 参数
变更
允许 ALTER ROLE/DATABASE ... SET 设置 role、session_authorization 和 temp_buffers 参数(Tom Lane)§
以前,过于急切的有效性检查可能拒绝这些命令,即使相关值在之后实际使用时本可以正常工作。这使转储/重载和升级场景中出现了命令顺序方面的隐患。
关联记录 (4)
- 相同变化PostgreSQL 12.7 · 允许 ALTER ROLE/DATABASE ... SET 设置 role、session_authorization 和 temp_buffers 参数
- 相同变化PostgreSQL 11.12 · 允许 ALTER ROLE/DATABASE ... SET 设置 role、session_authorization 和 temp_buffers 参数
- 相同变化PostgreSQL 10.17 · 允许 ALTER ROLE/DATABASE ... SET 设置 role、session_authorization 和 temp_buffers 参数
- 相同变化PostgreSQL 9.6.22 · 允许 ALTER ROLE/DATABASE ... SET 设置 role、session_authorization 和 temp_buffers 参数
改进确保 REINDEX CONCURRENTLY 保留为索引设置的统计目标
变更
问题修复修复 COMMIT AND CHAIN,使其在当前事务存在有效保存点时正确工作
变更
修复 COMMIT AND CHAIN,使其在当前事务存在有效保存点时正确工作(Fujii Masao)§
问题修复修复 WITH RECURSIVE 处理中的列表操作缺陷
变更
修复 WITH RECURSIVE 处理中的列表操作缺陷(Michael Paquier,Tom Lane)§
足够深的 WITH 结构嵌套(至少七层)会触发核心转储,或错误地报告 WITH 嵌套有误。
问题修复修复将 COLLATE 表达式的结果强制转换为不支持排序规则的类型时的缺陷
变更
修复将 COLLATE 表达式的结果强制转换为不支持排序规则的类型时的缺陷(Tom Lane)§
这会生成一棵语法解析树,其中 COLLATE 看起来被应用于一个不支持排序规则的值。虽然这通常没有实际影响(因为 COLLATE 在运行时没有作用),但仍有可能构造出在转储/重载期间被拒绝的视图。
问题修复修复为 AFTER 触发器保存元组时的释放后使用缺陷
改进禁止通过“快速路径”线协议消息调用窗口函数和过程
变更
禁止通过“快速路径”线协议消息调用窗口函数和过程(Tom Lane)§
这里只支持普通函数。虽然尝试调用聚合函数已经会失败,但调用窗口函数会导致崩溃,而调用过程只有在过程不进行事务控制时才能正常工作。
改进扩展 pg_identify_object_as_address(),使其支持事件触发器
变更
问题修复修复 to_char() 对负时间间隔使用罗马数字月份格式代码的处理
变更
修复 to_char() 对负时间间隔使用罗马数字月份格式代码的处理(Julien Rouhaud)§
以前,此类情况通常会导致崩溃。
改进检查 pg_import_system_collations() 的参数是否为有效的模式 OID
变更
检查 pg_import_system_collations() 的参数是否为有效的模式 OID(Tom Lane)§
问题修复修复解析 BRE 模式正则表达式中的 \{m,n\} 量词时使用未初始化值的问题
变更
修复解析 BRE 模式正则表达式中的 \{ 量词时使用未初始化值的问题(Tom Lane)§m,n\}
此错误可能使量词表现为非贪婪模式,即表现得像完整正则表达式中的 { 量词。m,n}?
问题修复修复排序键涉及聚合函数或窗口函数的某些情况下出现的 “could not find pathkey item to sort” 规划器错误
变更
修复排序键涉及聚合函数或窗口函数的某些情况下出现的 “could not find pathkey item to sort” 规划器错误(James Coleman,Tom Lane)§
改进使用扩展统计信息估计分组数量时,不要忽略系统列
变更
使用扩展统计信息估计分组数量时,不要忽略系统列(Tomas Vondra)§
这会导致 SELECT ... GROUP BY a, b, ctid 等查询得到异常的估计值。
问题修复避免估计具有很长固定前缀的正则表达式的选择率时出现除零错误
变更
避免估计具有很长固定前缀的正则表达式的选择率时出现除零错误(Tom Lane)§
这通常会产生 NaN 选择率值,从而导致断言失败或规划器行为异常。
问题修复修复 BRIN 索引位图扫描中访问超出表末尾位置的错误
变更
修复 BRIN 索引位图扫描中访问超出表末尾位置的错误(Tomas Vondra)§
如果 BRIN 索引使用的页范围大小不是二的幂,在某些边界情况下,位图扫描可能尝试获取超出表实际末尾的页面,导致 “could not open file” 错误。
问题修复修复匹配元组很多时,GIN tsvector 索引搜索可能返回错误结果的问题
变更
修复匹配元组很多时,GIN tsvector 索引搜索可能返回错误结果的问题(Tom Lane)§
如果索引匹配项的数量足够多,导致存储它们的位图变为有损位图(阈值取决于 work_mem),代码就可能错误判断是否需要重新检查,从而返回实际上并不匹配查询的行。
问题修复修复 Windows 上 WAL 段回收的并发问题
变更
修复 Windows 上 WAL 段回收的并发问题(Michael Paquier)§
这撤销了一项会间歇性产生 “could not rename file ...: Permission denied” 日志消息的修改。虽然没有严重后果,但大量无用日志令人困扰。
改进避免从 WAL 恢复未提交的两阶段事务时发生不正确的时间线变更
变更
避免从 WAL 恢复未提交的两阶段事务时发生不正确的时间线变更(Soumyadeep Chakraborty,Jimmy Yih,Kevin Yeap)§
此错误可能使后续 WAL 记录在错误的时间线 ID 下写入,导致之后出现一致性问题,甚至完全无法重启服务器。
改进确保关闭备库的启动进程时释放锁
变更
确保关闭备库的启动进程时释放锁(Fujii Masao)§
在备库仍处于恢复状态时将其关闭,可能会留下某些仍被持有的锁。这会导致调试构建中的断言失败;尚不清楚在生产构建中是否可能造成严重后果。
问题修复修复逻辑复制工作进程执行 ALTER SUBSCRIPTION REFRESH 时的崩溃
变更
修复逻辑复制工作进程执行 ALTER SUBSCRIPTION REFRESH 时的崩溃(Peter Smith)§
核心代码不会这样做,但副本触发器可能会。
改进确保在较新版本的 FreeBSD 上默认使用 wal_sync_method = fdatasync
变更
确保在较新版本的 FreeBSD 上默认使用 wal_sync_method = fdatasync(Thomas Munro)§
FreeBSD 13 支持 open_datasync,通常它会成为默认选择。但尚不清楚这对 Postgres 是否确有改进,因此暂时保留现有默认值。
改进禁用 vacuum_cleanup_index_scale_factor 参数及存储选项
问题修复在 ALTER CONSTRAINT 期间,将正确的触发器 OID 传递给对象修改后钩子
变更
在 ALTER CONSTRAINT 期间,将正确的触发器 OID 传递给对象修改后钩子(Álvaro Herrera)§
在 ALTER CONSTRAINT 期间更新触发器属性时,修改后钩子被告知正在更新触发器,但传入的却是约束的 OID,而非触发器的 OID。
改进确保分离 DSM 段期间被中断时仍能完成清理
变更
确保分离 DSM 段期间被中断时仍能完成清理(Thomas Munro)§
此错误可能导致并行查询后未能及时清理临时文件。
问题修复修复服务器中多种较小的内存泄漏
变更
问题修复修复共享内存中 WAL 接收进程统计信息里的未初始化变量
变更
修复共享内存中 WAL 接收进程统计信息里的未初始化变量(Fujii Masao)§
此错误在大多数平台上无害,但在缺乏原子变量或自旋锁支持的平台上可能造成问题。
性能在编译时包含了 dtrace 支持但未启用时,降低 LWLock 操作中 dtrace 探针的开销
问题修复修复 PL/pgSQL DO 块同时使用复合类型变量和事务控制时的失败
变更
修复 PL/pgSQL DO 块同时使用复合类型变量和事务控制时的失败(Tom Lane)§
以前,此类情况会导致关于元组描述符泄漏的错误。
问题修复防止 libpq 收到长度损坏的 ParameterDescription 消息时陷入无限循环
变更
防止 libpq 收到长度损坏的 ParameterDescription 消息时陷入无限循环(Tom Lane)§
改进当 initdb 打印如何启动服务器的说明时,使其在 Windows 上显示的 pg_ctl 路径使用反斜杠分隔符
变更
当 initdb 打印如何启动服务器的说明时,使其在 Windows 上显示的 pg_ctl 路径使用反斜杠分隔符(Nitin Jadhav)§
问题修复修复 psql,恢复 \connect service=something 以前的行为
变更
修复 psql,恢复 \connect service= 以前的行为(Tom Lane)§something
先前的一项缺陷修复导致环境变量(例如 PGPORT)在此情况下覆盖服务文件中的条目。现在恢复以前的行为,使优先级反过来。
问题修复修复 psql 的 ON_ERROR_ROLLBACK 功能,使其正确处理 COMMIT AND CHAIN 命令
变更
修复 psql 的 ON_ERROR_ROLLBACK 功能,使其正确处理 COMMIT AND CHAIN 命令(Arthur Nascimento)§
以前,这种情况会以 “savepoint "pg_psql_temporary_savepoint" does not exist” 错误失败。
改进在 psql 中,避免首次出现 “could not print result table” 错误后反复发生同类错误
变更
在 psql 中,避免首次出现 “could not print result table” 错误后反复发生同类错误(Álvaro Herrera)§
问题修复修复 psql 的 \e 及相关命令检测文件修改时的竞争条件
变更
修复 psql 的 \e 及相关命令检测文件修改时的竞争条件(Laurenz Albe)§
输入速度非常快的用户可能使代码基于文件时间戳对临时编辑文件是否更改的判断失准。
问题修复修复 pg_dump 对分区表中生成列的转储
问题修复修复 pg_restore 中遗漏的文件版本检查
变更
修复 pg_restore 中遗漏的文件版本检查(Tom Lane)§
从不支持定位的来源读取自定义格式归档时,pg_restore 忽略了检查归档版本。如果输入的归档版本比它所支持的版本更新,之后就会以混乱的方式失败。
改进为 pg_upgrade 增加对包含不可升级数据类型的用户表的检查
变更
为 pg_upgrade 增加对包含不可升级数据类型的用户表的检查(Tom Lane)§
修复对不可升级的数据类型嵌入容器类型(例如数组或范围)中的某些情况的检测。另外,如果用户表包含系统定义的复合类型的列,则不允许升级,因为这些类型的 OID 在不同版本之间并不稳定。
问题修复修复 pg_checksums 中不正确的进度报告计算
问题修复修复 pg_waldump,使其在生成逐记录统计信息时正确统计 XACT 记录
变更
修复 pg_waldump,使其在生成逐记录统计信息时正确统计 XACT 记录(Kyotaro Horiguchi)§
问题修复修复 contrib/amcheck,使其不再因元组标志 HEAP_XMAX_LOCK_ONLY 和 HEAP_KEYS_UPDATED 同时设置而报错
变更
修复 contrib/amcheck,使其不再因元组标志 HEAP_XMAX_LOCK_ONLY 和 HEAP_KEYS_UPDATED 同时设置而报错(Julien Rouhaud)§
这是 SELECT FOR UPDATE 之后的一种有效状态。
关联记录 (4)
- 相同变化PostgreSQL 12.7 · 修复 contrib/amcheck,使其不再因元组标志 HEAP_XMAX_LOCK_ONLY 和 HEAP_KEYS_UPDATED 同时设置而报错
- 相同变化PostgreSQL 11.12 · 修复 contrib/amcheck,使其不再因元组标志 HEAP_XMAX_LOCK_ONLY 和 HEAP_KEYS_UPDATED 同时设置而报错
- 相同变化PostgreSQL 10.17 · 修复 contrib/amcheck,使其不再因元组标志 HEAP_XMAX_LOCK_ONLY 和 HEAP_KEYS_UPDATED 同时设置而报错
- 相同变化PostgreSQL 9.6.22 · 修复 contrib/amcheck 不再对同时设置了元组标志 HEAP_XMAX_LOCK_ONLY 和 HEAP_KEYS_UPDATED 报怨
改进调整 VPATH 构建规则,以支持较新版本的 Oracle Developer Studio 编译器
变更
调整 VPATH 构建规则,以支持较新版本的 Oracle Developer Studio 编译器(Noah Misch)§
问题修复修复 Solaris 上针对 Python 3 的 PL/Python 测试
变更
修复 Solaris 上针对 Python 3 的 PL/Python 测试(Noah Misch)§
没有匹配的变化
尝试其他关键词,或 .
如何生成比较结果?
比较依据起始版本之后至目标版本的 PostgreSQL 发布说明。经核实的回补重复项会谨慎合并,保留每条原始说明;相关提交可能涉及独立变化,仍作为不同记录保留。
发布快照: 2026-09-26 · 安全快照: 2026-09-26
内容来自 PostgreSQL 发布说明。交互方式参考 pgversions.com 与 pgversionreport.