pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。
本次发布的全部变更
2020-09-24
13.0 历史版本维护截止 2025-11-13
对于希望从任何先前版本迁移数据的用户,需要使用pg_dumpall进行导出/恢复,或使用pg_upgrade或逻辑复制。有关迁移到新主版本的一般信息,请参见第 18.6 节。
版本 13 包含许多可能影响与先前版本兼容性的变更。请注意以下不兼容性:
兼容性
将 SIMILAR TO ... ESCAPE NULL 改为返回 NULL(Tom Lane)§
这一新行为符合 SQL 规范。以前,ESCAPE 为空值时,被解释为使用默认转义字符串(反斜杠字符)。这也适用于 substring(。通过保持原函数不变,在旧视图中保留了以前的行为。text FROM pattern ESCAPE text)
兼容性
使 json[b]_to_tsvector() 完整检查其 string 选项的拼写(Dominik Czarnota)§
兼容性
改变非默认的effective_io_concurrency值影响并发度的方式(Thomas Munro)§
以前,该值在用于设置并发请求数之前会经过调整。现在直接使用该值。可以通过以下方式将旧值转换为新值:
SELECT round(sum(OLDVALUE/ n::float)) AS newvalue FROM generate_series(1,OLDVALUE) s(n);
兼容性
不再在pg_stat_ssl和pg_stat_gssapi系统视图中显示辅助进程(Euler Taveira)§
如果查询将这些视图与pg_stat_activity连接,并希望看到辅助进程,就需要使用左连接。
兼容性
修复 ALTER FOREIGN TABLE ... RENAME COLUMN,使其返回更合适的命令标签(Fujii Masao)§
以前返回 ALTER TABLE;现在返回 ALTER FOREIGN TABLE。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
兼容性
修复 ALTER MATERIALIZED VIEW ... RENAME COLUMN,使其返回更合适的命令标签(Fujii Masao)§
以前返回 ALTER TABLE;现在返回 ALTER MATERIALIZED VIEW。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
兼容性
将配置参数 wal_keep_segments 重命名为wal_keep_size(Fujii Masao)§
这决定为备库保留多少 WAL。它以 MB 为单位指定,而旧参数以文件数量指定。如果以前使用 wal_keep_segments,以下公式可以得到大致等价的设置:
wal_keep_size = wal_keep_segments * wal_segment_size (typically 16MB)
兼容性
移除对升级未打包扩展(9.1 之前的扩展)的支持(Tom Lane)§
CREATE EXTENSION 不再支持 FROM 选项。任何仍使用未打包扩展的安装实例,都应在更新到 PostgreSQL 13 之前,将这些扩展升级为已打包的版本。
兼容性
移除对时区数据库中 posixrules 文件的支持(Tom Lane)§
IANA 的时区工作组已弃用此特性,这意味着它将在未来几年中逐渐从系统的时区数据库中消失。为避免时区数据更新意外引发行为变化,我们从版本 13 开始移除了 PostgreSQL 对此特性的支持。这只影响缺少显式夏令时切换规则的 POSIX 风格时区指定的行为;以前可以通过安装自定义 posixrules 文件来确定切换规则,现在则使用硬编码规则。对于受影响的安装实例,建议改用地理时区名称。
兼容性
修复pageinspect的 bt_metap(),使其返回更合适、不易溢出的数据类型(Peter Geoghegan)§
服务器 / 分区
允许通过发布对分区表进行逻辑复制(Amit Langote)§ §
以前,必须逐个复制分区。现在可以显式发布分区表,从而自动发布其所有分区。添加或移除分区时,也会将其相应地添加到发布或从发布中移除。CREATE PUBLICATION 的 publish_via_partition_root 选项控制分区变更是作为分区自身的变更发布,还是作为父表的变更发布。
服务器 / 分区
允许逻辑复制写入订阅者上的分区表(Amit Langote)§
以前,订阅者只能将接收到的行写入非分区表。
服务器 / 分区
允许在分区表达式中使用整行变量(即 table.*)(Amit Langote)§
服务器 / 索引
更高效地存储 B-树索引中的重复项(Anastasia Lubennikova,Peter Geoghegan)§
这通过只存储一次重复键,使低基数列能够高效地使用 B-树索引。使用pg_upgrade升级的用户,需要执行 REINDEX 才能让现有索引使用这一特性。
服务器 / 索引
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
服务器 / 一般性能
实现增量排序(James Coleman,Alexander Korotkov,Tomas Vondra)§ §
如果已知查询的中间结果按照所需排序顺序的一个或多个前导键排好序,则可以将前导键相同的行分批排序,只考虑剩余键即可完成额外的排序。
如有需要,可以使用enable_incremental_sort控制此行为。
服务器 / 一般性能
允许插入操作也触发自动清理中的清理活动,而不再仅由更新和删除触发(Laurenz Albe,Darafei Praliaskouski)§
以前,仅有插入活动时会触发自动分析,但不会触发自动清理,理由是不存在需要移除的死元组。然而,清理扫描还有其他有益的副作用,例如设置页面全可见位,从而提高仅索引扫描的效率。另外,让仅插入的表接受周期性清理,有助于分散“冻结”旧元组的工作量,避免整个表同时达到防回卷阈值时,突然需要执行大量冻结工作。
如有需要,可以通过新参数autovacuum_vacuum_insert_threshold和autovacuum_vacuum_insert_scale_factor,或等价的表存储选项来调整此行为。
服务器 / 一般性能
增加maintenance_io_concurrency参数,以控制维护操作的 I/O 并发度(Thomas Munro)§
服务器 / 一般性能
如果wal_level为 minimal,则允许在创建或重写关系的事务期间跳过 WAL 写入(Kyotaro Horiguchi)§
对于大于wal_skip_threshold的关系,会对其文件执行 fsync,而不生成 WAL。以前,只有 COPY 操作会这样处理,但其实现有一个缺陷,可能在崩溃恢复期间导致数据丢失。
服务器 / 一般性能
提高使用大量表空间时重放 DROP DATABASE 命令的性能(Fujii Masao)§
服务器 / 一般性能
加快整数到文本的转换(David Fetter)§
服务器 / 一般性能
减少包含大量 SQL 语句的查询字符串和扩展脚本的内存用量(Amit Langote)§
服务器 / 监控
允许 EXPLAIN、auto_explain、自动清理和pg_stat_statements跟踪 WAL 使用统计信息(Kirill Bychik,Julien Rouhaud)§ § §
服务器 / 监控
允许抽样记录 SQL 语句,而不必记录全部语句(Adrien Nayrat)§
对于耗时超过log_min_duration_sample的语句,将按log_statement_sample_rate指定的比例记录日志。
服务器 / 监控
将后端类型添加到 csvlog 日志输出中,并允许选择将其加入log_line_prefix日志输出(Peter Eisentraut)§
服务器 / 监控
改进对预备语句参数日志记录的控制(Alexey Bashtanov,Álvaro Herrera)§ §
GUC 设置log_parameter_max_length控制记录未出错语句时输出的参数值的最大长度,而log_parameter_max_length_on_error对出错语句的日志执行相同控制。以前,发生错误时从不记录预备语句的参数。
服务器 / 监控
允许在出错后记录函数调用回溯(Peter Eisentraut,Álvaro Herrera)§ §
新参数backtrace_functions指定哪些 C 函数应在出错时生成回溯。
服务器 / 系统视图
向pg_stat_activity添加 leader_pid,以报告并行工作进程的领导者进程(Julien Rouhaud)§
服务器 / 系统视图
增加系统视图 pg_stat_progress_basebackup,以报告流式基础备份的进度(Fujii Masao)§
服务器 / 系统视图
增加系统视图 pg_stat_progress_analyze,以报告 ANALYZE 进度(Álvaro Herrera,Tatsuro Yamada,Vinayak Pokale)§
服务器 / 系统视图
增加系统视图 pg_shmem_allocations,以显示共享内存使用情况(Andres Freund,Robert Haas)§
服务器 / 系统视图
增加系统视图 pg_stat_slru,以监控内部 SLRU 缓存(Tomas Vondra)§
服务器 / 系统视图
允许将track_activity_query_size设置为最高 1MB(Vyacheslav Makarov)§
以前的最大值为 100kB。
服务器 / 等待事件
使用 posix_fallocate() 创建 DSM 段时报告等待事件(Thomas Munro)§
服务器 / 等待事件
增加等待事件 VacuumDelay,以报告基于代价的清理延迟(Justin Pryzby)§
服务器 / 等待事件
为 WAL 归档和恢复暂停增加等待事件(Fujii Masao)§
新增事件为 BackupWaitWalArchive 和 RecoveryPause。
服务器 / 等待事件
增加等待事件 RecoveryConflictSnapshot 和 RecoveryConflictTablespace,以监控恢复冲突(Masahiko Sawada)§
服务器 / 等待事件
提高基于 BSD 的系统上的等待事件性能(Thomas Munro)§
服务器 / Authentication
只允许超级用户查看ssl_passphrase_command设置(Insung Moon)§
此项修改出于安全考虑。
服务器 / Authentication
将服务器加密连接默认允许的最低 TLS 版本从 1.0 改为 1.2(Peter Eisentraut)§
可以通过ssl_min_protocol_version控制这一选择。
服务器 / 服务器配置
收紧关于只读事务模式下允许执行哪些实用命令的规则(Robert Haas)§
此项修改还增加了可在并行查询中运行的实用命令数量。
服务器 / 服务器配置
允许在服务器启动后修改allow_system_table_mods(Peter Eisentraut)§
服务器 / 服务器配置
在设置allow_system_table_mods时,禁止非超级用户修改系统表(Peter Eisentraut)§
以前,如果在服务器启动时设置了allow_system_table_mods,非超级用户就可以对系统表执行 INSERT/UPDATE/DELETE 命令。
流复制和恢复
允许通过重载更改流复制配置设置(Sergei Kornilov)§
以前,更改primary_conninfo和primary_slot_name需要重启服务器。
流复制和恢复
允许 WAL 接收进程在未指定永久复制槽时使用临时复制槽(Peter Eisentraut,Sergei Kornilov)§ §
可以使用wal_receiver_create_temp_slot启用此行为。
流复制和恢复
允许通过max_slot_wal_keep_size限制复制槽的 WAL 存储量(Kyotaro Horiguchi)§
需要超过此值的复制槽会被标记为无效。
流复制和恢复
允许控制逻辑解码在溢写到磁盘之前可以使用多少内存(Tomas Vondra,Dilip Kumar,Amit Kapila)§
流复制和恢复
允许在 WAL 引用无效页面时仍继续恢复(Fujii Masao)§
可以使用ignore_invalid_pages启用此功能。
工具命令
允许 FETCH FIRST 使用 WITH TIES 返回与最后一个结果行的排序值相同的所有额外行(Surafel Temesgen)§
工具命令
使 CREATE TABLE LIKE 将 CHECK 约束的 NO INHERIT 属性传递给所创建的表(Ildar Musin,Chris Travers)§
工具命令
对分区表使用 LOCK TABLE 时,不检查子表上的权限(Amit Langote)§
工具命令
允许向标识列插入时使用 OVERRIDING USER VALUE(Dean Rasheed)§
工具命令
增加 ALTER TABLE ... DROP EXPRESSION,以允许移除列的 GENERATED 属性(Peter Eisentraut)§
工具命令
修复多步骤 ALTER TABLE 命令中的缺陷(Tom Lane)§
IF NOT EXISTS 子句现在按预期工作:如果列已存在,就不会执行派生操作(例如创建索引)。另外,将相关操作合并到一条 ALTER TABLE 中的某些情况,以前无法正常工作,现在也已可用。
工具命令
增加用于重命名视图列的 ALTER VIEW 语法(Fujii Masao)§
以前已经可以重命名视图列,但必须写成 ALTER TABLE RENAME COLUMN,这令人困惑。
工具命令
增加 ALTER TYPE 选项,以修改基础类型的 TOAST 属性和支持函数(Tomas Vondra,Tom Lane)§
工具命令
增加 CREATE DATABASE 的 LOCALE 选项(Peter Eisentraut)§
这将现有的 LC_COLLATE 和 LC_CTYPE 选项合并为单个选项。
工具命令
允许 DROP DATABASE 断开正在使用目标数据库的会话,以使删除成功(Pavel Stehule,Amit Kapila)§
这通过 FORCE 选项启用。
工具命令
增加结构成员 tg_updatedcols,使 C 语言更新触发器能够知道哪些列被更新(Peter Eisentraut)§
数据类型
增加多态数据类型,供要求参数类型兼容的函数使用(Pavel Stehule)§
新增数据类型为 anycompatible、anycompatiblearray、anycompatiblenonarray 和 anycompatiblerange。
数据类型
增加数据类型 regcollation 及相关函数,以表示排序规则对象的 OID(Julien Rouhaud)§
数据类型
增加 Windows 上的排序规则版本支持(Thomas Munro)§
函数
增加 jsonb_set() 的另一个版本,改进对 NULL 的处理(Andrew Dunstan)§
新函数 jsonb_set_lax() 根据请求处理值为 NULL 的新值:将指定键设为 JSON null、删除该键、抛出异常,或返回未经修改的 jsonb 值。
函数
增加 jsonpath 的 .datetime() 方法(Nikita Glukhov,Teodor Sigaev,Oleg Bartunov,Alexander Korotkov)§
此函数允许将 JSON 值转换为时间戳,随后即可在 jsonpath 表达式中处理这些时间戳。此项修改还增加了支持时区感知输出的 jsonpath 函数。
函数
增加 SQL 函数 NORMALIZE(),以规范化 Unicode 字符串,并增加 IS NORMALIZED 来检查是否已规范化(Peter Eisentraut)§
函数
允许Unicode 转义,例如 E'\u 或 nnnn'U&'\,指定数据库编码中可用的任何字符,即使数据库编码不是 UTF-8(Tom Lane)§nnnn'
函数
增加日期时间格式模式 FF1 – FF6,以指定输入或输出 1 到 6 位小数秒(Alexander Korotkov,Nikita Glukhov,Teodor Sigaev,Oleg Bartunov)§
这些模式可用于 to_char()、to_timestamp() 和 jsonpath 的 .datetime()。
函数
增加日期时间格式模式 SSSSS,作为 SSSS 的 SQL 标准别名(Nikita Glukhov,Alexander Korotkov)§
函数
增加函数 gen_random_uuid(),以生成版本 4 UUID(Peter Eisentraut)§
函数
增加函数 min_scale(),返回完整精确表示 numeric 值所需的小数点右侧位数(Pavel Stehule)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
函数
增加函数 trim_scale(),通过移除尾随零来减少 numeric 值的小数位数(Pavel Stehule)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
函数
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
函数
增加移除对象对扩展依赖的能力(Álvaro Herrera)§
对象可以是函数、物化视图、索引或触发器。语法为 ALTER .. NO DEPENDS ON。
PL/pgSQL
提高简单 PL/pgSQL 表达式的性能(Tom Lane,Amit Langote)§
PL/pgSQL
提高使用不可变表达式的 PL/pgSQL 函数的性能(Konstantin Knizhnik)§
客户端接口
允许 libpq 客户端要求加密连接使用通道绑定(Jeff Davis)§
使用 libpq 连接参数 channel_binding,会强制 TLS 连接的另一端证明它知道用户的密码。这可以防止中间人攻击。
客户端接口
增加 libpq 连接参数,以控制加密连接允许的最低和最高 TLS 版本(Daniel Gustafsson)§ § §
这些设置为ssl_min_protocol_version和ssl_max_protocol_version。默认最低 TLS 版本为 1.2(这与以前的发行版相比是行为上的变化)。
客户端接口
允许使用密码解锁客户端证书(Craig Ringer,Andrew Dunstan)§
这通过 libpq 的sslpassword连接参数启用。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
客户端接口
允许 libpq 使用 DER 编码的客户端证书(Craig Ringer,Andrew Dunstan)§
客户端接口
修复 ecpg 的 EXEC SQL elif 指令,使其正确工作(Tom Lane)§
以前,它的行为与 endif 后跟 ifdef 相同,因此即使同一 if 结构中的前一个分支已成功匹配,也不会阻止展开 elif 分支或后续分支。
客户端应用程序 / psql
允许 psql 的次级提示符为空白,但与主提示符具有相同宽度(Thomas Munro)§
这通过将 PROMPT2 设为 %w 实现。
客户端应用程序 / psql
将 PostgreSQL 主页添加到命令行 --help 输出中(Peter Eisentraut)§
客户端应用程序 / pgbench
允许 pgbench 对其 “accounts” 表进行分区(Fabien Coelho)§
这使分区性能测试成为可能。
客户端应用程序 / pgbench
增加 pgbench 命令 \aset,其行为类似 \gset,但适用于多个查询(Fabien Coelho)§
客户端应用程序 / pgbench
允许 pgbench 在服务器端而非客户端生成初始数据(Fabien Coelho)§
客户端应用程序 / pgbench
允许 pgbench 使用 --show-script 选项显示脚本内容(Fabien Coelho)§
服务器应用程序
为基础备份生成备份清单,并验证备份(Robert Haas)§ §
新工具pg_verifybackup可以验证备份。
服务器应用程序
使pg_basebackup默认估计备份总大小(Fujii Masao)§
这一计算使 pg_stat_progress_basebackup 能够显示进度。如果不需要,可以使用 --no-estimate-size 选项禁用它。以前,只有使用 --progress 选项时才会进行这一计算。
服务器应用程序
为pg_rewind增加配置备库的选项(Paul Guo,Jimmy Yih,Ashwin Agrawal)§
这与pg_basebackup的 --write-recovery-conf 选项一致。
服务器应用程序
允许 pg_rewind 使用目标集群的restore_command获取所需的 WAL(Alexey Kondratov)§
这通过 -c/--restore-target-wal 选项启用。
服务器应用程序
使 pg_rewind 在回退之前自动运行崩溃恢复(Paul Guo,Jimmy Yih,Ashwin Agrawal)§
可以使用 --no-ensure-shutdown 禁用此行为。
服务器应用程序
增加 pg_waldump 报告的 PREPARE TRANSACTION 相关信息(Fujii Masao)§
服务器应用程序
增加pg_waldump选项 --quiet,以抑制非错误输出(Andres Freund,Robert Haas)§
服务器应用程序
从 createuser 中移除 --adduser 和 --no-adduser(Alexander Lakhin)§
长期以来,用于此目的的推荐选项是 --superuser 和 --no-superuser。
服务器应用程序
运行 pg_upgrade 时,将pg_upgrade程序所在的目录用作默认的 --new-bindir 设置(Daniel Gustafsson)§
文档
升级为使用 DocBook 4.5(Peter Eisentraut)§
源代码
增加使用 Visual Studio 2019 构建的支持(Haribabu Kommi)§
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
源代码
增加 MSYS2 构建支持(Peter Eisentraut)§
源代码
为 Power PC 编译器增加 compare_exchange 和 fetch_add 的汇编代码(Noah Misch)§
源代码
更新全文检索使用的 Snowball 词干分析器词典(Panagiotis Mavrogiorgos)§
这增加了希腊语词干提取,并改进了丹麦语和法语的词干提取。
源代码
移除对 Windows 2000 的支持(Michael Paquier)§
源代码
移除对非 ELF 的 BSD 系统的支持(Peter Eisentraut)§
源代码
将查询字符串传递给规划器钩子函数(Pascal Legrand,Julien Rouhaud)§
源代码
增加 TLS 初始化钩子(Andrew Dunstan)§
源代码
允许在不预定义 Unix 域套接字目录的情况下构建(Peter Eisentraut)§
源代码
降低 Unix 平台上 SysV 资源键冲突的概率(Tom Lane)§
源代码
使用操作系统函数可靠地擦除包含敏感信息的内存(Peter Eisentraut)§
例如,可用它清除存储在内存中的密码。
源代码
增加 headerscheck 脚本以测试 C 头文件的兼容性(Tom Lane)§
源代码
将内部列表实现为数组,而不再采用单元链表(Tom Lane)§
这提高了访问大量对象的查询的性能。
附加模块
允许非超级用户不使用密码就连接到postgres_fdw外部服务器(Craig Ringer)§
具体来说,允许超级用户将某个用户映射的 password_required 设置为 false。仍须注意防止非超级用户使用超级用户凭据连接到外部服务器。
附加模块
允许 postgres_fdw 使用证书认证(Craig Ringer)§
不同用户可以使用不同证书。
附加模块
增加扩展bool_plperl,以在 SQL 布尔值和 PL/Perl 布尔值之间进行双向转换(Ivan Panchenko)§
附加模块
使pg_stat_statements将 SELECT ... FOR UPDATE 命令与不带 FOR UPDATE 的命令分别处理(Andrew Gierth,Vik Fearing)§
附加模块
增加pageinspect函数,以人类可读的格式输出 t_infomask/t_infomask2 值(Craig Ringer,Sawada Masahiko,Michael Paquier)§ §
附加模块
向 pageinspect 输出添加 B-树索引去重处理相关列(Peter Geoghegan)§
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。