pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
对比两个 PostgreSQL 大版本或小版本,查看沿途新增的功能、修复的问题与 CVE 安全记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 10 起的 10 个大版本、174 份发布说明;数据更新于 2026-09-26。
跨大版本升级
2026-08-13 2026-08-13
17.11 受支持版本维护截止 2029-11-08
18.6 受支持版本维护截止 2030-11-14
对于运行 18.X 的用户,不需要执行导出/恢复。
但是,下面前三个安全条目描述了更新后可能需要进行的配置调整和数据清理。
此外,如果存在任何 GIN 索引,请参见下面有关其所属表的 reltuples 值可能已损坏的变更条目。
此外,如果使用 contrib/btree_gist 或 contrib/ltree,可能需要为这些扩展创建的索引重建索引;请参见下面的相关条目。
此外,如果是从早于 18.2 的版本升级,请参见第 E.4 节。
变更
确保并行 GIN 索引构建正确更新表的 pg_class.reltuples 值(Jan Nidzwetzki、Tomas Vondra)§
并行工作进程可能会用未初始化的值报告其已处理行数,导致 reltuples 得到无效值,甚至 Infinity 或 NaN。此类值可能导致后续的自动清理和自动分析操作始终判定该表不需要处理。出现这种情况后不会自行恢复。需要手工执行 ANALYZE 命令或创建另一个索引,才能把 reltuples 重置为正确值。如果有任何带 GIN 索引的表,建议检查其 reltuples 条目是否合理。以下查询可能有助于此检查:
SELECT DISTINCT t.oid::regclass, t.reltuples FROM pg_class t JOIN pg_index i ON t.oid = i.indrelid JOIN pg_class ic ON i.indexrelid = ic.oid WHERE t.relhasindex AND ic.relam = 2742;
变更
修复 UPDATE 使用 RETURNING OLD 时,在带有 BEFORE UPDATE 触发器的表上漏掉并发更新的问题(Dean Rasheed)§
如果目标行被并发更新,那么在隔离级别 READ COMMITTED 下,任何 OLD 值在 RETURNING 中都应反映更新后的行。但如果存在触发器,返回的却是陈旧值(尽管触发器本身和最终输出行看到的是正确值)。
变更
修复存在多个连接键和大量 NULL 值时哈希连接的性能问题(David Rowley)§
NULL 键元组不应插入 hash 表,因为它们绝不会匹配任何其他元组。如果 NULL 位于非末尾连接列,代码就会错误处理;当大量输入包含 NULL 时,hash 表会因此严重膨胀。
变更
修复带圆括号的 OLD/NEW 在 RETURNING 表达式中的解析(Marko Grujic)§
诸如 (old).colname 和 (old).* 的表达式处理有误,实际上被转换成了 NEW 引用。
变更
避免将 WHERE 子句下推越过使用不同等价规则的分组步骤(Richard Guo)§
对采用非确定性排序规则分组的分组列所作的测试,只有在使用同一排序规则进行比较时才能安全地下推。否则,它可能过滤掉一些本应被分组合并的行。
变更
避免 “cache lookup failed for collation 0” 错误;该错误发生在规划器为 "char" 类型的列查找统计信息时(Feng Wu)§
变更
禁止通过ALTER CONSTRAINT对分区的NOT NULL约束设置NO INHERIT。(Andreas Karlsson)§
分区表上的 NOT NULL 约束应由所有分区继承,因此不得标记为 NO INHERIT。创建约束时正确执行了此规则,但 ALTER TABLE ... ALTER CONSTRAINT 未执行此规则。
变更
修复精确匹配模式的 LIKE/正则表达式索引扫描优化(Jelte Fennema-Nio)§
非确定性排序规则下的 LIKE 重构意外破坏了以下优化:当索引排序规则与表达式排序规则不匹配时,把 LIKE 或正则表达式的精确匹配模式转换成等值索引条件。不仅如此,这还使 psql 的 \d 命令慢了很多。tablename
变更
更正希腊语词尾 sigma 的大小写折叠规则(Jeff Davis)§
如果字符串前面只有 Case Ignorable 字符,则不要将其视为词尾 sigma。这仅影响内置 pg_unicode_fast 区域设置。
变更
拒绝 uuidv7() 中超出范围的时间戳偏移值(Baji Shaik)§
偏移值不得大到使时间戳超出 v7 UUID 可表示的范围。此前会生成无效的 UUID 值。
变更
防止访问临时表期间出现 “no empty local buffer available” 错误(Melanie Plageman)§
限制读取流机制可使用的本地缓冲区数量。此前,较大的 effective_io_concurrency 值可能允许单个流用尽所有缓冲区,从而导致失败。
变更
修复 JIT 编译的元组解构代码,使其正确考虑虚拟生成列(David Rowley)§
变更
防止在 WAL 重放达到一致的数据库状态之前接受热备连接(Nikhil Sontakke)§
变更
避免读取或写入失败后记录错误的 I/O 操作统计信息(Bertrand Drouvot)§
变更
改进 libpq 对内存不足情况的处理(Anthonin Bonnefoy)§
变更
修复 libpq 的跟踪功能,使其正确打印新式 BackendKeyData 和 CancelRequest 消息(Anthonin Bonnefoy)§
变更
修复 ecpg 编译器中的空指针崩溃(Jehan-Guillaume de Rorthais)§
ecpg 无法处理这样的 DECLARE 段:其中含有嵌套在 struct 内的 union。
变更
修复 psql 流水线模式下延迟错误的问题(Michael Paquier)§
在服务器响应 Sync 消息时报错的某些场景(例如延迟约束违例)中, psql 可能卡住或发生断言失败。
变更
强制执行 psql 特殊变量 WATCH_INTERVAL 的原定上限(Sven Klemm、Daniel Gustafsson)§
如果给出的值过大,psql 会报告错误但仍应用该设置。
变更
修复 vacuumdb --missing-stats-only,使其忽略分区表达式索引(Baji Shaik)§
此前,vacuumdb 总是尝试对分区表执行 ANALYZE,但这毫无作用,因为分区索引本身从不创建统计信息,只有其叶子索引才创建。
变更
在 contrib/amcheck 中,修复未能报告 B-树元页的 allequalimage 标志损坏的问题(Chao Li)§
变更
在 contrib/amcheck 中,修复验证 GIN 索引时查询生命周期内的内存泄漏(Kirill Reshke)§
变更
在 contrib/btree_gist 中,修复构建 GiST 索引时对 bit/varbit 条目的排序(Tom Lane)§
bit 类型的值被当作 bytea 排序。由于类型的表示形式不同,虽然这不会导致明显失败,却会产生低效索引。安装此更新后,建议对 bit 列上的 btree_gist 索引重建索引。
变更
拒绝将 use_scram_passthrough 设置到 contrib/dblink 外部数据包装器上(Matheus Alcantara)§
此选项仅对外部服务器和用户映射有意义,但 dblink 错误地允许在 FDW 级别设置它(随后又忽略它)。
变更
修复 contrib/pg_prewarm 的 autoprewarm 工作进程中的越界访问(Matheus Alcantara)§
代码试图获取数组末尾之后一个位置的值,可能导致段错误。
对于运行 18.X 的用户,不需要执行导出/恢复。
但是,如果你从早于 18.2 的版本升级,请参见第 E.4 节。
变更
在恢复属性 MCV 统计信息时检测错误输入(Michael Paquier)§
统计信息恢复函数在验证高频值统计信息时不够谨慎,会接受稍后可能导致规划器崩溃的值。
PostgreSQL 项目感谢 Jeroen Gui 报告此问题。(CVE-2026-6575)
变更
改进规划器将分区键列匹配到子查询输出的逻辑(Richard Guo)§
在将操作数与分区键比较之前,去除其中的无操作 PlaceHolderVar。此变更使分区剪枝在某些此前未能识别出无需扫描某个分区的情况下能够成功。
变更
修复自连接移除,使其能够处理裸布尔列形式的连接子句,例如 ON t1.boolcol(Andrei Lepikhov, Tender Wang, Alexander Korotkov)§
以前这种情况会导致 “no relation entry for relid N” 错误。
变更
修复 UPDATE/DELETE ... WHERE CURRENT OF,使其可用于带有虚拟生成列的表(Satyanarayana Narlapuram, Dean Rasheed)§
变更
修复 INSERT ... ON CONFLICT 中 EXCLUDED 列引用里的虚拟生成列展开问题(Satyanarayana Narlapuram, Dean Rasheed)§
变更
修复虚假的 “indexes on virtual generated columns are not supported” 错误(Robert Haas)§
创建表达式索引时有时会错误地报告此错误。
变更
修复 ALTER TABLE ... SET NOT NULL,使其只在完成目录更改后才调用对象访问钩子函数(Artur Zakirov)§
变更
修复外键触发器的可延迟性丢失问题(Yasuo Honda)§
以前,定义为 DEFERRABLE INITIALLY DEFERRED 的外键,在被设置为 NOT ENFORCED 状态再改回 ENFORCED 后,会表现得像 NOT DEFERRABLE。
如果你有受此问题影响的外键,可以在安装本次更新后,再次将其设置为 NOT ENFORCED,然后改回 ENFORCED 来修复。
变更
修复 WITHOUT OVERLAPS 以允许域(Jian He)§
UNIQUE/PRIMARY KEY ... WITHOUT OVERLAPS 要求无重叠列是范围或多范围,但它也应允许基于这类类型的域。
变更
让 pg_aios 系统视图的 pid 列在条目没有所属进程时显示 NULL 而不是 0(ChangAo Chen)§
变更
修复并行 B-树索引扫描所用共享内存分配不足的问题(Siddharth Kothari)§
在边界情况下,这可能导致服务器崩溃。
变更
修复安装过多 EXPLAIN 扩展选项时的数组越界写(Joel Jacobson)§
变更
正确显示在 GROUP BY 中使用的连接别名 Vars(Tom Lane)§
在包含类似 SELECT ... t1 LEFT JOIN t2 USING (x) GROUP BY x 查询的视图中,GROUP BY 子句可能被逆解析错误显示,从而导致导出/恢复失败。只有当 t1.x 和 t2.x 数据类型并不相同,并且 t1.x 是需要隐式强制转换的一侧时,才会发生该失败。
变更
加固 tar 文件解析逻辑,使其能够防范无法处理的归档(Tom Lane)§
pg_basebackup 和 pg_verifybackup 中使用的 tar 文件读取代码,根本没有验证输入是否为 tar 文件,更不用说验证它是否属于我们能够处理的有效 tar 文件子集。对于输入文件由 PostgreSQL 代码生成的常见场景,这不是问题;但如果输入由其他 tar 程序生成,就可能成为问题。
变更
在 pg_dump 中,保留 NOT NULL 约束的 NO INHERIT 属性(Jian He)§
有些情况遗漏了打印 NO INHERIT 子句。
变更
修复 contrib/pg_overexplain 的 RANGE_TABLE 选项输出结构错误的问题(Satyanarayana Narlapuram)§
某些字段在 JSON、YAML 和 XML 格式中位置错误,导致输出在结构上无效。
对于运行 18.X 的用户,不需要执行导出/恢复。
但是,如果你从早于 18.2 的版本升级,请参见第 E.4 节。
变更
修复针对 CVE-2026-2007 的修复中遗漏的问题(Zsolt Parragi)§
如果因为输入包含的三字符组比初始估计更多而需要扩展 “bounds” 数组,generate_trgm_only 没有把修改后的数组指针返回给调用者。这会导致 strict_word_similarity() 及相关函数输出错误,极少数情况下还会崩溃。如果输入字符串在转换为小写后变长,就会触发这段错误代码。目前已知仅会在某些单字节编码配合 ICU 区域设置时发生这种情况。
变更
修复 json_strip_nulls() 和 jsonb_strip_nulls() 的波动性标记(Andrew Dunstan)§
这些函数一直被视为不可变,但在版本 18 的重构中却意外被标记为稳定。这会阻止它们被用于索引表达式,并可能导致查询中不必要的重复求值。该修复会纠正在新初始化的数据库集簇中的标记(包括通过 pg_upgrade 升级到 18.3 或更高版本的集簇)。但是,它无法帮助使用 18.0 到 18.2 创建的现有集簇。
如果这一错误影响到了你对这些函数的使用,建议对现有集簇执行手工目录更新。以超级用户身份在每个受影响的数据库中执行:
UPDATE pg_catalog.pg_proc SET provolatile = 'i' WHERE oid IN ('3261','3262');
同时也要更新 template0 和 template1,这样将来新建的数据库也会带有该修复。
变更
避免用户自定义约束与自动命名的 NOT NULL 约束发生名称冲突(Laurenz Albe)§
从版本 18 开始,NOT NULL 约束拥有完整的 pg_constraint 条目,因此需要名字。对未命名 NOT NULL 约束选择名称的逻辑,未能避免与同一 CREATE TABLE 语句中用户编写的其他约束发生冲突。
对于运行 18.X 的用户,不需要执行导出/恢复。
但是,如果你在 ltree 列上建有索引,则更新后可能需要对其重新索引。请参见下方第六条变更记录。
变更
使用 ALTER TABLE ... ADD CONSTRAINT 为列添加显式命名的非空约束时,如果该列已经标记为 NOT NULL,则要求所提供的名称与现有约束名称一致(Álvaro Herrera、Srinath Reddy Sadipiralla)。§
变更
修复对非关系范围表条目(例如子查询)所对应行标记的错误剪枝(Dean Rasheed)§
如果拟执行的行更新需要由 EvalPlanQual 复查修改,例如该行被并发更新时,此问题会导致不正确的结果。
变更
修复数组下标内子查询的表达式求值错误(Andres Freund)§
变更
修复非确定性排序规则下的文本子串搜索(Laurenz Albe)§
使用非确定性排序规则时,未能检测到恰好位于被搜索字符串末尾的匹配。
变更
修复涉及返回集合的函数和分组集的规划器错误(Richard Guo)§
构造 ProjectSet 计划节点时,规划器未能识别出涉及分组表达式的子表达式已由输入计划计算。这会导致低效计划,或出现 “variable not found in subplan target list” 等错误。
变更
避免在子查询的分组子句包含易变函数或返回集合的函数时进行不正确的优化(Richard Guo)§
规划器会尝试下推引用此类分组列的外层查询限制,这会因为对易变函数进行多次求值而导致错误行为,或者因将返回集合的函数引入子查询的 WHERE/HAVING 子句而报错。
变更
在搜索表达式的统计信息时穿透 PlaceHolderVar 节点(Richard Guo)§
此更改允许规划器找到从子查询上拉出来的表达式,或用于 GROUP BY 的表达式的相关统计信息,从而避免退回到默认估算值。(严格来说,我们也许应该调整找到的统计信息,以反映该值为 NULL 的概率增加,但对于普通 Var 我们也从未做过同等处理。)这一限制虽由来已久,但 PostgreSQL 18 让 PlaceHolderVar 的出现比以前更常见,因此做出此修改以避免受影响场景中的计划退化。
变更
在将表达式匹配到索引时穿透无操作的 PlaceHolderVar 节点(Richard Guo)§
由于 PostgreSQL 18 在更多场景下使用 PlaceHolderVar,一些原本可以使用索引的查询反而不能使用索引了。新增相应逻辑以防止这种退化。
变更
修复规划器将 OR 子句转换为 ScalarArrayOp 索引条件时的问题(Tender Wang、Tom Lane)§
该代码未能正确处理 RelabelType 节点,可能生成无效表达式,或者无法完成本应有效的转换。
变更
在并行 GIN 索引构建中使用正确的排序函数(Tomas Vondra)§
并行代码使用了默认排序操作符(由列数据类型的 B-树操作符类决定),而它本应在存在时使用 GIN 操作符类指定的排序函数。如果该数据类型没有 B-树操作符类,就会失败;如果操作符类指定的排序函数与 B-树操作符类不一致,则会生成无效索引。
变更
在计算查询 ID hash 时纳入分组表达式(Jian He)§
以前,两个除了 GROUP BY 表达式不同之外其余都相同的查询,会被 contrib/pg_stat_statements 以及其他使用查询 ID 的模块合并在一起。
变更
修复异步 I/O 代码中的竞争条件(Andres Freund)§
异步 I/O 操作的结果码有可能在被读取之前就被覆盖。
变更
避免在页面被换出时 NUMA 状态视图失败(Tomas Vondra)§
变更
避免在使用较旧 libnuma 版本查询 NUMA 页面状态时出现 “operation not permitted” 错误(Tomas Vondra)§
变更
修复对 io_uring_queue_init_mem() 的错误 configure 检测(Masahiko Sawada)§
该错误导致在基于 autotools 的构建中无法优化异步 I/O 缓冲区分配,尽管使用 meson 构建时这段代码是可用的。这个遗漏的主要影响是后端进程退出速度比应有的更慢。
变更
修复 psql 对 VACUUM 选项值的 Tab 补全(Yugo Nagata)§
变更
在 psql 命令提示符中,如果没有服务器连接,则不要显示 %P(管道状态)的值(Chao Li)§
这使 %P 的行为与其他依赖当前活动连接的提示符转义序列保持一致。
变更
修复 pg_dump 对 oauth_validator_libraries 取值的引号处理可能不正确的问题(ChangAo Chen)§
如果 pg_dump 需要转储该设置的值,它此前会应用错误的引用规则。
变更
修复 contrib/pg_buffercache 中过度分配内存的问题(David Geier)§
代码分配的内存是NUMA页面状态需要的两倍。
变更
避免当 contrib/pg_stat_statements 处理包含常量和非常量表达式的 IN 列表时发生崩溃(Sami Imseih)§
对于运行 18.X 的用户,不需要执行导出/恢复。
变更
不要在哈希右半连接中使用并行(Richard Guo)§
由于在更新连接的共享 hash 表时存在竞态条件,该情况无法可靠工作。
变更
避免创建有序追加计划时可能发生的除零错误(Richard Guo)§
这种错误可能导致错误选择最便宜的路径,或导致调试构建中的断言失败。
变更
修复使用支持有序访问但不支持仅索引扫描的索引类型时发生的规划器失败(Maxime Schoemans)§
这一疏漏会导致 “no data returned for index-only scan” 等错误。任何核心内置索引类型都不会出现这种情况,但一些扩展遇到了此问题。
变更
避免并行 GIN 索引构建期间可能发生的内存不足或 “invalid memory alloc request size” 失败(Tomas Vondra)§
变更
修复处理带 hash 的 GROUPING SETS 查询时罕见的崩溃(David Rowley)§
变更
修复哈希连接中有误的 hash 表大小选择逻辑(Tomas Vondra)§
哈希连接有时会使用比预期更多的内存,或者未能以高效的方式划分这些内存。
变更
修复在分区表上执行 EvalPlanQual 重新检查期间发生的崩溃(David Rowley、Amit Langote)§
变更
如果某列带有标记为无效的非空约束,则禁止将其设置为 identity 列(Jian He)§
identity 列必须是非空的,但先前的检查漏掉了这一边界情况。
变更
在区域设置中恢复对 C 排序规则的特殊处理(Jeff Davis)§
这修复了后端启动早期、尚未选择数据库之前访问共享系统目录时的一个回归问题。目前尚未发现这会影响 PostgreSQL 核心代码,但某些扩展已因此失效。
变更
在 contrib/pg_stat_statements 中,避免当 SQL 语句文本中的两个或多个常量被标记为同一位置时发生崩溃(Sami Imseih、Dmitry Dolgov)§
对于希望从任何以前的版本迁移数据的人来说,需要使用pg_dumpall进行转储/恢复,或者使用pg_upgrade或逻辑复制。有关迁移到新主要版本的通用信息,请参阅第 18.6 节。
版本 18 包含许多可能影响与以前版本兼容性的更改。请注意以下不兼容项:
兼容性
将initdb默认更改为启用数据校验和(Greg Sabino Mullane)§
可以使用新的 initdb 选项 --no-data-checksums 禁用校验和。pg_upgrade要求匹配集簇校验和设置,因此这个新选项对于升级不带校验和的旧集簇很有用。
兼容性
更改时区缩写处理(Tom Lane)§
系统现在将优先考虑当前会话的时区缩写,然后检查服务器变量timezone_abbreviations。以前是先检查 timezone_abbreviations。
兼容性
对 MD5 密码的支持将在未来的主要版本中移除。CREATE ROLE和ALTER ROLE现在在设置 MD5 密码时会发出弃用警告。可以通过将md5_password_warnings参数设置为 off 来禁用这些警告。
兼容性
禁止不记录 WAL 的分区表(Michael Paquier)§
以前 ALTER TABLE SET [UN]LOGGED 不执行任何操作,并且创建不记录 WAL 的分区表也不会导致其子表不记录 WAL。
兼容性
移除列 pg_backend_memory_contexts.parent(Melih Mutlu)§
由于添加了 pg_backend_memory_contexts.path,不再需要此列。
兼容性
将 pg_backend_memory_contexts.level 和 pg_log_backend_memory_contexts() 更改为从1开始(Melih Mutlu, Atsushi Torikoshi, David Rowley, Fujii Masao)§ § §
这些以前是从零开始的。
兼容性
更改全文检索,使其使用数据库集簇默认排序规则提供程序来读取配置文件和词典,而不再始终使用 libc(Peter Eisentraut)§
如果数据库集簇默认使用的非 libc 排序规则提供程序(例如 ICU、builtin)对 LC_CTYPE 所处理字符的处理方式与 libc 不同,那么某些全文检索函数以及pg_trgm扩展的行为可能会发生变化。使用pg_upgrade升级此类数据库集簇时,建议在升级后重新索引所有与全文检索和pg_trgm相关的索引。
服务器 / 优化器
自动删除一些不必要的表自连接(Andrey Lepikhov, Alexander Kuzmenkov, Alexander Korotkov, Alena Rybakina)§
可以使用服务器变量enable_self_join_elimination禁用此优化。
服务器 / 优化器
将一些 IN (VALUES ...) 转换为 x = ANY ... 以获得更好的优化器统计信息(Alena Rybakina, Andrei Lepikhov)§
服务器 / 优化器
允许 SELECT DISTINCT 的键在内部重新排序以避免排序(Richard Guo)§
可以使用enable_distinct_reordering禁用此优化。
服务器 / 优化器
改进 generate_series() 使用 numeric 和 timestamp 值时的行数估计(David Rowley, Song Jinzhou)§ §
服务器 / 优化器
允许优化器使用 Right Semi Join 计划(Richard Guo)§
半连接用于查找是否存在至少一个匹配项。
服务器 / 优化器
改进分区查询的代价估算(Nikita Malakhov, Andrei Lepikhov)§
服务器 / 优化器
改进禁用优化器功能的处理(Robert Haas)§
服务器 / 一般性能
添加异步 I/O 子系统(Andres Freund, Thomas Munro, Nazir Bilal Yavuz, Melanie Plageman)§ § § § § § § § § § §
此功能允许后端排队多个读取请求,从而实现更高效的顺序扫描、位图堆扫描、清理等。这由服务器变量io_method启用,并添加了服务器变量io_combine_limit和io_max_combine_limit来控制它。这还使得不支持 fadvise() 的系统也可以将effective_io_concurrency和maintenance_io_concurrency设为大于零的值。新的系统视图 pg_aios 显示用于异步 I/O 的文件句柄。
服务器 / 一般性能
改进访问许多关系的查询的锁定性能(Tomas Vondra)§
服务器 / 一般性能
允许普通清理冻结某些页面,即使它们都是可见的(Melanie Plageman)§ §
这减少了后期全关系冻结的开销。其激进性可以通过服务器变量和每表设置vacuum_max_eager_freeze_failure_rate控制。以前,在需要冻结之前,清理从不处理所有可见页面。
服务器 / 一般性能
添加服务器变量vacuum_truncate以控制VACUUM期间的文件截断(Nathan Bossart, Gurjeet Singh)§
已经存在一个具有相同名称和行为的存储级别参数。
服务器 / 一般性能
将服务器变量effective_io_concurrency和maintenance_io_concurrency的默认值增加到 16(Melanie Plageman)§ §
这更准确地反映了现代硬件。
服务器 / 监控
增加服务器变量log_connections的日志记录粒度(Melanie Plageman)§
此服务器变量以前仅接受布尔值;布尔值用法仍受支持。
服务器 / 监控
添加 log_connections 选项以报告连接阶段的持续时间(Melanie Plageman)§
服务器 / 监控
添加log_line_prefix转义 %L 以输出客户端IP地址(Greg Sabino Mullane)§
服务器 / 监控
添加服务器变量log_lock_failures以记录锁获取失败(Yuki Seino, Fujii Masao)§ §
具体来说,它报告 SELECT ... NOWAIT 锁失败。
服务器 / 监控
修改 pg_stat_all_tables 及其变体以报告在VACUUM、ANALYZE及其自动执行的变体中花费的时间(Sami Imseih)§
新列是 total_vacuum_time、total_autovacuum_time、total_analyze_time 和 total_autoanalyze_time。
服务器 / 监控
向VACUUM和ANALYZE添加延迟时间报告(Bertrand Drouvot, Nathan Bossart)§ §
此信息出现在服务器日志、系统视图 pg_stat_progress_vacuum 和 pg_stat_progress_analyze 以及VACUUM和ANALYZE在 VERBOSE 模式下的输出中;必须使用服务器变量track_cost_delay_timing启用跟踪。
服务器 / 监控
添加完整WAL缓冲区计数到 VACUUM/ANALYZE (VERBOSE) 和 autovacuum 日志输出(Bertrand Drouvot)§
服务器 / 监控
添加每后端 I/O 统计信息报告(Bertrand Drouvot)§ §
统计信息通过 pg_stat_get_backend_io() 访问。每后端 I/O 统计信息可以通过 pg_stat_reset_backend_stats() 清除。
服务器 / 监控
添加 pg_stat_io 列以字节报告 I/O 活动(Nazir Bilal Yavuz)§
新列是 read_bytes、write_bytes 和 extend_bytes。op_bytes 列(始终等于 BLCKSZ)已移除。
服务器 / 监控
更改服务器变量track_wal_io_timing以控制在pg_stat_io而不是 pg_stat_wal中跟踪WAL计时(Bertrand Drouvot)§
服务器 / 监控
添加函数 pg_stat_get_backend_wal() 以返回每后端WAL统计信息(Bertrand Drouvot)§
每后端WAL统计信息可以通过 pg_stat_reset_backend_stats() 清除。
服务器 / 监控
添加函数 pg_ls_summariesdir() 以专门列出 PGDATA/pg_wal/summaries 的内容(Yushi Ogiwara)§
服务器 / 监控
添加列 pg_stat_checkpointer.num_done 以报告已完成的检查点数量(Anton A. Melnikov)§
列 num_timed 和 num_requested 同时统计已完成和已跳过的检查点。
服务器 / 监控
添加列 pg_stat_checkpointer.slru_written 以报告SLRU写入的缓冲区(Nitin Jadhav)§
此外,修改检查点服务器日志消息以报告单独的共享缓冲区和SLRU缓冲区值。
服务器 / 监控
添加列到 pg_stat_database 以报告并行工作者活动(Benoit Lobréau)§
新列是 parallel_workers_to_launch 和 parallel_workers_launched。
服务器 / 监控
让常量列表的查询 ID 计算只考虑第一个和最后一个常量(Dmitry Dolgov, Sami Imseih)§ § §
查询规范化由pg_stat_statements使用。
服务器 / 监控
调整查询 ID 计算以将使用相同关系名称的查询组合在一起(Michael Paquier, Sami Imseih)§
即使不同模式中的表具有不同的列名,这也是成立的。
服务器 / 监控
添加列 pg_backend_memory_contexts.type 以报告内存上下文的类型(David Rowley)§
服务器 / 监控
添加列 pg_backend_memory_contexts.path 以显示内存上下文父级(Melih Mutlu)§
服务器 / 权限
添加函数 pg_get_acl() 以检索数据库访问控制详细信息(Joel Jacobson)§ §
服务器 / 权限
添加函数 has_largeobject_privilege() 以检查大型对象权限(Yugo Nagata)§
服务器 / 权限
允许ALTER DEFAULT PRIVILEGES定义大型对象默认权限(Takatsuka Haruka, Yugo Nagata, Laurenz Albe)§
服务器 / 权限
添加预定义角色 pg_signal_autovacuum_worker(Kirill Reshke)§
这允许向自动清理工作者发送信号。
服务器 / 服务器配置
添加对 OAuth 认证方法的支持(Jacob Champion, Daniel Gustafsson, Thomas Munro)§
这为 pg_hba.conf 添加了 oauth 认证方法、libpq OAuth 选项、一个用于加载令牌验证库的服务器变量oauth_validator_libraries,以及一个 --with-libcurl 配置标志,用于添加所需的编译时库。
服务器 / 服务器配置
添加服务器变量ssl_tls13_ciphers以允许指定多个以冒号分隔的 TLSv1.3 密码套件(Erica Zhang, Daniel Gustafsson)§
服务器 / 服务器配置
将服务器变量ssl_groups的默认值更改为包含椭圆曲线 X25519(Daniel Gustafsson, Jacob Champion)§
服务器 / 服务器配置
将服务器变量 ssl_ecdh_curve 重命名为ssl_groups,并允许指定多个以冒号分隔的ECDH曲线(Erica Zhang, Daniel Gustafsson)§
以前的名称仍然有效。
服务器 / 服务器配置
添加服务器变量autovacuum_worker_slots以指定后台工作者的最大数量(Nathan Bossart)§
设置此变量后,autovacuum_max_workers可以在运行时调整到此最大值,而无需重新启动服务器。
服务器 / 服务器配置
允许指定触发 autovacuum 的死元组的固定数量(Nathan Bossart, Frédéric Yhuel)§
服务器变量是autovacuum_vacuum_max_threshold。百分比仍用于触发。
服务器 / 服务器配置
更改服务器变量max_files_per_process以仅限制后端打开的文件(Andres Freund)§
以前,postmaster 打开的文件也计入此限制。
服务器 / 服务器配置
添加服务器变量num_os_semaphores以报告所需信号量的数量(Nathan Bossart)§
这对于操作系统配置很有用。
服务器 / 服务器配置
添加服务器变量extension_control_path以指定扩展控制文件的位置(Peter Eisentraut, Matheus Alcantara)§ §
服务器 / 流复制与恢复
允许使用服务器变量idle_replication_slot_timeout自动使非活动复制槽失效(Nisha Moond, Bharath Rupireddy)§
服务器 / 流复制与恢复
添加服务器变量max_active_replication_origins以控制最大活动复制源(Euler Taveira)§
这以前由max_replication_slots控制,但这个新设置允许在需要较少槽位的情况下具有更高的源计数。
服务器 / 逻辑复制
将CREATE SUBSCRIPTION流式选项的默认值从 off 更改为 parallel(Vignesh C)§
服务器 / 逻辑复制
允许ALTER SUBSCRIPTION更改复制槽的两阶段提交行为(Hayato Kuroda, Ajin Cherian, Amit Kapila, Zhijie Hou)§ §
工具命令
允许像现有本地表一样创建外部表(Zhang Mingli)§
工具命令
允许文本位置搜索函数与非确定性排序规则一起使用(Peter Eisentraut)§
这些以前会生成错误。
工具命令
添加内置排序规则提供程序 PG_UNICODE_FAST(Jeff Davis)§
此区域设置支持大小写映射,但按代码点顺序排序,而非自然语言顺序。
工具命令
添加函数以修改每关系和每列优化器统计信息(Corey Huinker)§ § §
这些函数是 pg_restore_relation_stats()、pg_restore_attribute_stats()、pg_clear_relation_stats() 和 pg_clear_attribute_stats()。
工具命令
添加服务器变量file_copy_method以控制文件复制方法(Nazir Bilal Yavuz)§
这控制 CREATE DATABASE ... STRATEGY=FILE_COPY 和 ALTER DATABASE ... SET TABLESPACE 是使用文件复制还是克隆。
工具命令 / 约束
允许指定不重叠的 PRIMARY KEY、 UNIQUE 和外键约束(Paul A. Jungwirth)§ §
这通过 WITHOUT OVERLAPS 用于 PRIMARY KEY 和 UNIQUE,并通过 PERIOD 用于外键,所有这些都应用于最后一个指定的列。
工具命令 / 约束
允许将 CHECK 和外键约束指定为 NOT ENFORCED(Amul Sul)§ §
这还添加了列 pg_constraint.conenforced。
工具命令 / 约束
要求主键/外键关系使用确定性排序规则或相同的非确定性排序规则(Peter Eisentraut)§
如果这些要求不满足,pg_dump的恢复(pg_upgrade也使用)将失败;必须对模式进行更改才能使这些升级方法成功。
工具命令 / 约束
将列 NOT NULL 规范存储在 pg_constraint 中(Álvaro Herrera, Bernd Helmle)§ §
这允许为 NOT NULL 约束指定名称。这还向外部表添加了 NOT NULL 约束,并向本地表添加了 NOT NULL 继承控制。
工具命令 / 约束
允许ALTER TABLE设置 NOT NULL 约束的 NOT VALID 属性(Rushabh Lathia, Jian He)§
工具命令 / 约束
允许分区表上的 NOT VALID 外键约束(Amul Sul)§
工具命令 / COPY
添加 REJECT_LIMIT 以控制 COPY FROM 可以忽略的无效行数(Atsushi Torikoshi)§
这在 ON_ERROR = 'ignore' 时可用。
工具命令 / COPY
允许 COPY TO 从已填充的物化视图复制行(Jian He)§
工具命令 / COPY
添加 COPY LOG_VERBOSITY 级别 silent 以抑制被忽略行的日志输出(Atsushi Torikoshi)§
当 on_error = 'ignore' 时,此新级别会抑制与被丢弃输入行有关的消息输出。
工具命令 / COPY
禁止在外部表上 COPY FREEZE(Nathan Bossart)§
以前,COPY 可以工作,但 FREEZE 会被忽略,所以禁止此命令。
工具命令 / EXPLAIN
自动将 BUFFERS 输出包含在 EXPLAIN ANALYZE 中(Guillaume Lelarge, David Rowley)§
工具命令 / EXPLAIN
添加完整WAL缓冲区计数到 EXPLAIN (WAL) 输出(Bertrand Drouvot)§
工具命令 / EXPLAIN
在 EXPLAIN ANALYZE 中,报告每个索引扫描节点使用的索引查找次数(Peter Geoghegan)§
工具命令 / EXPLAIN
将窗口函数参数的详细信息添加到 EXPLAIN 输出(Tom Lane)§
工具命令 / EXPLAIN
将 Parallel Bitmap Heap Scan 工作者缓存统计信息添加到 EXPLAIN ANALYZE(David Geier, Heikki Linnakangas, Donghang Lin, Alena Rybakina, David Rowley)§
数据类型
向 json{b}_strip_nulls 添加可选参数,以允许删除数组中的空值元素(Florents Tselai)§
数据类型
添加函数 array_sort(),它对数组的第一维进行排序(Junwang Zhao, Jian He)§
数据类型
添加函数 array_reverse(),它反转数组的第一维(Aleksander Alekseev)§
函数
添加函数 casefold() 以允许更复杂的忽略大小写匹配(Jeff Davis)§
这允许更准确的比较,即一个字符可以有多个大写或小写等价物,或者大写或小写转换会改变字符的数量。
函数
改进 EXTRACT(QUARTER ...) 对负值的输出(Tom Lane)§
函数
向 to_number() 添加罗马数字支持(Hunaid Sohail)§
这通过 RN 模式访问。
Libpq
添加函数 PQfullProtocolVersion() 以报告完整的(包括次要版本)协议版本号(Jacob Champion, Jelte Fennema-Nio)§
Libpq
向客户端报告search_path更改(Alexander Kukushkin, Jelte Fennema-Nio, Tomas Vondra)§ §
Libpq
添加 libpq 连接参数 sslkeylogfile,该参数会转储SSL密钥材料(Abhishek Chanda, Daniel Gustafsson)§
这对于调试很有用。
Libpq
修改一些 libpq 函数签名以使用 int64_t(Thomas Munro)§
这些以前使用 pg_int64,现已弃用。
psql
允许 psql 解析、绑定和关闭命名预处理语句(Anthonin Bonnefoy, Michael Paquier)§ §
这通过新命令 \parse、\bind_named 和 \close_prepared 完成。
psql
添加 psql 反斜杠命令以允许发出管道查询(Anthonin Bonnefoy)§ § §
新命令是 \startpipeline、\syncpipeline、\sendpipeline、\endpipeline、\flushrequest、\flush 和 \getresults。
psql
允许将管道状态添加到 psql 提示符并添加相关状态变量(Anthonin Bonnefoy)§
新的提示符字符是 %P,新的 psql 变量是 PIPELINE_SYNC_COUNT、PIPELINE_COMMAND_COUNT 和 PIPELINE_RESULT_COUNT。
psql
允许将连接服务名称添加到 psql 提示符或通过 psql 变量访问它(Michael Banck)§
psql
添加 psql 选项,在所有列表命令上使用扩展模式(Dean Rasheed)§
添加反斜杠后缀 x 启用此功能。
psql
添加 psql 变量WATCH_INTERVAL以设置默认的 \watch 等待时间(Daniel Gustafsson)§
服务器应用
添加 initdb 选项 --no-sync-data-files 以避免同步堆/索引文件(Nathan Bossart)§
initdb 选项 --no-sync 仍然可用,以避免同步任何文件。
服务器应用
添加pg_combinebackup选项 -k/--link 以启用硬链接(Israel Barth Rubio, Robert Haas)§
只有某些文件可以硬链接。如果备份将独立使用,则不应使用此功能。
服务器应用
允许pg_verifybackup验证 tar 格式备份(Amul Sul)§
服务器应用
添加pg_resetwal选项 --char-signedness 以更改默认的 char 有符号性(Masahiko Sawada)§
服务器应用 / pg_dump/pg_dumpall/pg_restore
添加 pg_dump 和pg_dumpall选项 --sequence-data 以转储通常会被排除的序列数据(Nathan Bossart)§ §
服务器应用 / pg_dump/pg_dumpall/pg_restore
添加pg_dump、pg_dumpall和pg_restore选项 --statistics-only、--no-statistics、--no-data 和 --no-schema(Corey Huinker, Jeff Davis)§
服务器应用 / pg_dump/pg_dumpall/pg_restore
添加选项 --no-policies 以禁用pg_dump、pg_dumpall、pg_restore中的行级安全策略处理(Nikolay Samokhvalov)§
这对于迁移到具有不同策略的系统很有用。
服务器应用 / pg_upgrade
添加 pg_upgrade 选项 --swap 以交换目录而不是复制、克隆或链接文件(Nathan Bossart)§
此模式可能是最快的。
服务器应用 / 逻辑复制应用程序
添加pg_createsubscriber选项 --all 以创建所有数据库的逻辑副本(Shubham Khanna)§
服务器应用 / 逻辑复制应用程序
添加 pg_createsubscriber 选项 --enable-two-phase 以启用预备事务(Shubham Khanna)§
服务器应用 / 逻辑复制应用程序
添加pg_recvlogical选项 --enable-failover 以指定故障切换槽(Hayato Kuroda)§
还添加选项 --enable-two-phase 作为 --two-phase 的同义词,并弃用后者。
服务器应用 / 逻辑复制应用程序
允许 pg_recvlogical --drop-slot 在没有 --dbname 的情况下工作(Hayato Kuroda)§
源代码
分离注入点的加载和运行(Michael Paquier, Heikki Linnakangas)§ §
现在可以通过 INJECTION_POINT_LOAD() 创建注入点但不运行,并且可以通过 INJECTION_POINT_CACHED() 运行这些注入点。
源代码
支持注入点中的运行时参数(Michael Paquier)§
源代码
允许使用 IS_INJECTION_POINT_ATTACHED() 的内联注入点测试代码(Heikki Linnakangas)§
源代码
使用 x86 AVX-512 指令加速 CRC32C 计算(Raghuveer Devulapalli, Paul Amonson)§
源代码
添加配置选项--with-libnuma以启用NUMA感知功能(Jakub Wartak, Bertrand Drouvot)§ § §
函数pg_numa_available() 报告是否具备NUMA感知能力;系统视图 pg_shmem_allocations_numa 和pg_buffercache_numa 报告共享内存在NUMA节点之间的分布。
源代码
移除列pg_attribute.attcacheoff(David Rowley)§
源代码
将amgettreeheight、amconsistentequality和amconsistentordering添加到索引访问方法API(Mark Dilger)§ §
源代码
添加GiST支持函数stratnum()(Paul A. Jungwirth)§
源代码
在pg_controldata中记录CPU对char类型的默认有符号性(Masahiko Sawada)§
源代码
将最低支持的Python版本更改为3.6.8(Jacob Champion)§
源代码
如果启用LLVM,则要求版本14或更高(Thomas Munro)§
源代码
添加宏PG_MODULE_MAGIC_EXT以允许扩展报告其名称和版本(Andrei Lepikhov)§
此信息可以通过新函数pg_get_loaded_modules()访问。
源代码
文档指出SPI_connect()/SPI_connect_ext()总是返回成功(SPI_OK_CONNECT)(Stepan Neretin)§
错误总是通过ereport()报告。
源代码
移除Meson上Windows构建的实验性标记(Aleksander Alekseev)§
源代码
移除对HPPA/PA-RISC架构的支持(Tom Lane)§
附加模块
添加扩展pg_logicalinspect以检查逻辑快照(Bertrand Drouvot)§
附加模块
添加扩展pg_overexplain,它向EXPLAIN输出添加调试细节(Robert Haas)§
附加模块
向postgres_fdw_get_connections()添加输出列(Hayato Kuroda, Sagar Dilip Shedge)§ § § §
新的输出列used_in_xact指示外部数据包装器是否正在被当前事务使用,closed指示它是否已关闭,user_name指示用户名,remote_backend_pid指示远程后端进程标识符。
附加模块
允许将客户端的SCRAM认证传递给postgres_fdw服务器(Matheus Alcantara, Peter Eisentraut)§
这避免了在数据库中存储postgres_fdw认证信息,并通过postgres_fdw use_scram_passthrough连接选项启用。libpq使用新的连接参数scram_client_key和scram_server_key。
附加模块
添加reject_limit以控制file_fdw可以忽略的无效行数(Atsushi Torikoshi)§
这在ON_ERROR = 'ignore'时激活。
附加模块
向passwordcheck添加可配置变量min_password_length(Emanuele Musella, Maurizio Boriani)§
这控制最小密码长度。
附加模块
添加isn服务器变量weak以控制是否接受无效的校验位(Viktor Holmberg)§
这以前仅由函数isn_weak()控制。
附加模块
允许对值进行排序以加快btree_gist索引的构建(Bernd Helmle, Andrey Borodin)§
附加模块
添加amcheck检查函数gin_index_check()以验证GIN索引(Grigory Kryachko, Heikki Linnakangas, Andrey Borodin)§
附加模块
添加函数pg_buffercache_evict_relation()和pg_buffercache_evict_all()以逐出未钉住的共享缓冲区(Nazir Bilal Yavuz)§
现有函数pg_buffercache_evict()现在返回缓冲区刷新状态。
附加模块 / pg_stat_statements
允许CREATE TABLE AS和DECLARE的查询被pg_stat_statements跟踪(Anthonin Bonnefoy)§
它们现在也被分配了查询ID。
附加模块 / pg_stat_statements
添加pg_stat_statements列以报告并行活动(Guillaume Lelarge)§
新列是 parallel_workers_to_launch 和 parallel_workers_launched。
附加模块 / pg_stat_statements
添加pg_stat_statements.wal_buffers_full以报告满WAL缓冲区(Bertrand Drouvot)§
附加模块 / pgcrypto
添加pgcrypto算法sha256crypt和sha512crypt(Bernd Helmle)§
附加模块 / pgcrypto
添加函数fips_mode()以报告服务器的FIPS模式(Daniel Gustafsson)§
附加模块 / pgcrypto
添加pgcrypto服务器变量builtin_crypto_enabled以允许禁用内置非FIPS模式密码学函数(Daniel Gustafsson, Joe Conway)§
这对于保证FIPS模式行为很有用。
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
本次对比有 264 条已由起始版本包含;另有 0 条跨分支重复说明并入相应条目,可展开查看完整分支原文。JSON 导出包含逐条合并与排除依据。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。