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

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

文档版本对比

POSTGRESQL · VERSION COMPARE

PostgreSQL 11.0 的版本变更

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

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

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

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

本次发布的全部变更

11.0

2018-10-18

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

11.0 历史版本维护截止 2023-11-09

PostgreSQL 11.0

升级与兼容性说明

对于希望从任何先前版本迁移数据的用户,需要使用pg_dumpall进行导出/恢复,或使用pg_upgrade或逻辑复制。有关迁移到新主版本的一般信息,请参见第 18.6 节。

版本 11 包含许多可能影响与先前版本兼容性的变更。请注意以下不兼容性:

兼容性变化使pg_dump转储数据库的属性,而不只是内容

兼容性

使pg_dump转储数据库的属性,而不只是内容(Haribabu Kommi)

以前,数据库本身的属性,例如数据库级 GRANT/REVOKE 权限和 ALTER DATABASE SET 变量设置,只能由pg_dumpall转储。现在,pg_dump --create 和 pg_restore --create 除恢复数据库内的对象外,也会恢复这些数据库属性。pg_dumpall -g 现在仅转储角色和表空间相关属性。pg_dumpall 的完整输出(不带 -g)保持不变。

如果没有指定 --create,pg_dump 和 pg_restore 不再转储/恢复数据库级注释和安全标签;这些内容现在被视为数据库的属性。

pg_dumpall 的输出脚本现在始终使用数据库原有的区域设置和编码创建数据库,因此如果目标系统不认识该区域设置或编码名称,操作就会失败。以前,如果数据库的区域设置和编码与旧集群的默认值一致,输出的 CREATE DATABASE 就不会包含这些指定。

pg_dumpall --clean 现在会恢复 postgres 和 template1 数据库的原始区域设置和编码,以及用户创建数据库的相应设置。

兼容性变化在消除函数引用与列引用之间的歧义时,考虑语法形式

兼容性

在消除函数引用与列引用之间的歧义时,考虑语法形式(Tom Lane)

当 x 是表名或复合列时,PostgreSQL 传统上将语法形式 f(x) 和 x.f 视为等价,从而允许编写函数后,将其当作按需求值的列来使用。然而,如果两种解释都可行,以前总会选择列解释;当用户本意是调用函数时,这会产生意外结果。现在,若存在歧义,会选择与语法形式相符的解释。

兼容性变化全面强制表约束名和域约束名的唯一性

兼容性

全面强制表约束名和域约束名的唯一性(Tom Lane)

PostgreSQL 要求同一表的约束名称各不相同,域的约束名称也是如此。但以前对此没有严格强制检查,存在可创建重复名称的边界情况。

兼容性变化使 power(numeric, numeric) 和 power(float8, float8) 按照 POSIX 标准处理 NaN 输入

兼容性

使 power(numeric, numeric) 和 power(float8, float8) 按照 POSIX 标准处理 NaN 输入(Tom Lane,Dang Minh Huong)

POSIX 规定 NaN ^ 0 = 1 且 1 ^ NaN = 1,但其他所有包含 NaN 输入的情况都应返回 NaN。power(numeric, numeric) 以前在所有此类情况下都返回 NaN,现在会遵循这两个例外。只要 C 库符合标准,power(float8, float8) 就会符合标准;但某些旧 Unix 平台的库不符合标准,某些 Windows 版本上也存在问题。

兼容性变化当模板分隔符不匹配时,防止 to_number() 消耗字符

兼容性

当模板分隔符不匹配时,防止 to_number() 消耗字符(Oliver Ford)

具体而言,SELECT to_number('1234', '9,999') 以前返回 134,现在会返回 1234。L 和 TH 现在只消耗数字、正负号、小数点和逗号以外的字符。

兼容性变化修复 to_date()、to_number() 和 to_timestamp(),使其对每个模板字符跳过一个字符

兼容性

修复 to_date()、to_number() 和 to_timestamp(),使其对每个模板字符跳过一个字符(Tom Lane)

以前,它们对模板字符的每个字节跳过一个字节,如果任一字符串包含多字节字符,就会出现异常行为。

兼容性变化调整 to_char()、to_number() 和 to_timestamp() 对模板字符串中双引号内反斜线的处理。

兼容性

调整 to_char()、to_number() 和 to_timestamp() 对模板字符串中双引号内反斜线的处理。

这种反斜线现在会转义其后的字符,尤其是双引号或另一个反斜线。

兼容性变化正确处理 xmltable()、xpath() 及其他 XML 处理函数中的相对路径表达式

兼容性

正确处理 xmltable()、xpath() 及其他 XML 处理函数中的相对路径表达式(Markus Winand)

按照 SQL 标准,相对路径从 XML 输入文档的文档节点开始,而非像这些函数以前那样从根节点开始。

兼容性变化在扩展查询协议中,使 statement_timeout 分别应用于每条 Execute 消息,而非应用于 Sync 之前的所有命令

兼容性

在扩展查询协议中,使 statement_timeout 分别应用于每条 Execute 消息,而非应用于 Sync 之前的所有命令(Tatsuo Ishii,Andres Freund)

兼容性变化从系统目录 pg_class 中移除 relhaspkey 列

兼容性

从系统目录 pg_class 中移除 relhaspkey 列(Peter Eisentraut)

需要检查主键的应用应查询 pg_index。

兼容性变化将系统目录 pg_proc 的 proisagg 和 proiswindow 列替换为 prokind

兼容性

将系统目录 pg_proc 的 proisagg 和 proiswindow 列替换为 prokind(Peter Eisentraut)

这个新列更清楚地区分了函数、过程、聚合和窗口函数。

兼容性变化修正信息模式列 tables.table_type,使其返回 FOREIGN 而非 FOREIGN TABLE

兼容性

修正信息模式列 tables.table_type,使其返回 FOREIGN 而非 FOREIGN TABLE(Peter Eisentraut)

这种新输出符合 SQL 标准。

兼容性变化更改 ps 进程显示中的后台工作进程标签,使其与 pg_stat_activity.backend_type 标签一致

兼容性

更改 ps 进程显示中的后台工作进程标签,使其与 pg_stat_activity.backend_type 标签一致(Peter Eisentraut)

兼容性变化在通过 lo_open() 打开大对象时检查大对象权限,而非在尝试读写时检查

兼容性

在通过 lo_open() 打开大对象时检查大对象权限,而非在尝试读写时检查(Tom Lane,Michael Paquier)

如果请求写入权限但无法获得,现在即使最终从未写入该大对象,也会抛出错误。

关联记录(1)

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

兼容性变化防止非超级用户重建共享目录的索引

兼容性

防止非超级用户重建共享目录的索引(Michael Paquier,Robert Haas)

以前,数据库所有者也被允许这样做,但现在认为这超出了其权限范围。

兼容性变化移除已弃用的 adminpack 函数 pg_file_read()、pg_file_length() 和 pg_logfile_rotate()

兼容性

移除已弃用的 adminpack 函数 pg_file_read()、pg_file_length() 和 pg_logfile_rotate()(Stephen Frost)

核心后端现在已提供等效功能。现有 adminpack 安装在通过 ALTER EXTENSION ... UPDATE 更新之前,仍可访问这些函数。

关联记录(1)

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

兼容性变化遵循双引号内命令选项的大小写

兼容性

遵循双引号内命令选项的大小写(Daniel Gustafsson)

以前,某些 SQL 命令中的选项名即使以双引号输入,也会被强制转换为小写;因此,例如 "FillFactor" 会被接受为索引存储选项,尽管其正确名称应为小写。现在,此类情况将产生错误。

兼容性变化移除服务器参数 replacement_sort_tuples

兼容性

移除服务器参数 replacement_sort_tuples(Peter Geoghegan)

经判断,置换排序已不再有用。

兼容性变化移除 CREATE FUNCTION 中的 WITH 子句

兼容性

移除 CREATE FUNCTION 中的 WITH 子句(Michael Paquier)

PostgreSQL 很早以前就已支持更符合标准的语法来实现此功能。

兼容性变化在 PL/pgSQL 触发器函数中,未赋值的 OLD 和 NEW 变量现在读取为 NULL

兼容性

在 PL/pgSQL 触发器函数中,未赋值的 OLD 和 NEW 变量现在读取为 NULL(Tom Lane)

以前,对这些变量的引用可以解析,但无法执行。

关联记录(1)

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

新功能允许根据键列的 hash 值创建分区

服务器 / 分区

允许根据键列的 hash 值创建分区(Amul Sul)

新功能支持分区表上的索引

服务器 / 分区

支持分区表上的索引(Álvaro Herrera,Amit Langote)

分区表上的“索引”并非跨越整个分区表的物理索引,而是用于在表的每个分区上自动创建类似索引的模板。

如果索引列集合包含分区键,则可以将分区索引声明为 UNIQUE。它将表示覆盖整个分区表的有效唯一约束,尽管每个物理索引只在其自身分区内实施唯一性。

新命令 ALTER INDEX ATTACH PARTITION 将分区上的现有索引与其分区表的匹配索引模板关联起来。这为给现有分区表设置新的分区索引提供了灵活性。

新功能允许在分区表上定义外键

服务器 / 分区

允许在分区表上定义外键(Álvaro Herrera)

新功能允许在分区表上定义 FOR EACH ROW 触发器

服务器 / 分区

允许在分区表上定义 FOR EACH ROW 触发器(Álvaro Herrera)

在分区表上创建触发器,会自动在所有现有和未来分区上创建触发器。这也使分区表能够使用延迟唯一约束。

新功能允许分区表具有默认分区

服务器 / 分区

允许分区表具有默认分区(Jeevan Ladhe,Beena Emerson,Ashutosh Bapat,Rahila Syed,Robert Haas)

默认分区存储不匹配其他任何已定义分区的行,并据此被搜索。

新功能更改分区键列的 UPDATE 语句现在会将受影响的行移动到适当的分区

服务器 / 分区

更改分区键列的 UPDATE 语句现在会将受影响的行移动到适当的分区(Amit Khandekar)

新功能允许分区表上的 INSERT、UPDATE 和 COPY 将行正确路由到外部分区

服务器 / 分区

允许分区表上的 INSERT、UPDATE 和 COPY 将行正确路由到外部分区(Etsuro Fujita,Amit Langote)

postgres_fdw 外部表支持此功能。由于为此调用 ExecForeignInsert 回调函数的方式与以前不同,外部数据包装器必须相应修改以适应此更改。

性能改进加快查询处理期间的分区排除

服务器 / 分区

加快查询处理期间的分区排除(Amit Langote,David Rowley,Dilip Kumar)

这加快了对具有大量分区的分区表的访问。

新功能允许在查询执行期间排除分区

服务器 / 分区

允许在查询执行期间排除分区(David Rowley,Beena Emerson)

以前,分区排除仅在规划时进行,因此许多连接和预备查询无法使用分区排除。

新功能在分区表之间的等值连接中,允许直接连接匹配的分区

服务器 / 分区

在分区表之间的等值连接中,允许直接连接匹配的分区(Ashutosh Bapat)

此特性默认禁用,但可以通过更改 enable_partitionwise_join 启用。

新功能允许对分区表上的聚合函数按分区分别求值,随后合并结果

服务器 / 分区

允许对分区表上的聚合函数按分区分别求值,随后合并结果(Jeevan Chalke,Ashutosh Bapat,Robert Haas)

此特性默认禁用,但可以通过更改 enable_partitionwise_aggregate 启用。

新功能允许 postgres_fdw 将聚合下推到作为分区的外部表

服务器 / 分区

允许 postgres_fdw 将聚合下推到作为分区的外部表(Jeevan Chalke)

新功能允许并行构建 B-树索引

服务器 / 并行查询

允许并行构建 B-树索引(Peter Geoghegan,Rushabh Lathia,Heikki Linnakangas)

新功能允许使用共享 hash 表并行执行哈希连接

服务器 / 并行查询

允许使用共享 hash 表并行执行哈希连接(Thomas Munro)

新功能如果各条 SELECT 无法分别并行化,则允许 UNION 并行运行各条 SELECT

服务器 / 并行查询

如果各条 SELECT 无法分别并行化,则允许 UNION 并行运行各条 SELECT(Amit Khandekar,Robert Haas,Amul Sul)

关联记录(1)

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

新功能允许分区扫描更高效地使用并行工作进程

服务器 / 并行查询

允许分区扫描更高效地使用并行工作进程(Amit Khandekar,Robert Haas,Amul Sul)

关联记录(1)

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

新功能允许将 LIMIT 传递给并行工作进程

服务器 / 并行查询

允许将 LIMIT 传递给并行工作进程(Robert Haas,Tom Lane)

这使工作进程能够减少返回结果,并使用有针对性的索引扫描。

新功能允许单次求值查询(例如 WHERE 子句中的聚合查询)以及目标列表中的函数并行执行

服务器 / 并行查询

允许单次求值查询(例如 WHERE 子句中的聚合查询)以及目标列表中的函数并行执行(Amit Kapila,Robert Haas)

新功能添加服务器参数 parallel_leader_participation,以控制领导者是否也执行子计划

服务器 / 并行查询

添加服务器参数 parallel_leader_participation,以控制领导者是否也执行子计划(Thomas Munro)

默认启用,意味着领导者将执行子计划。

新功能允许并行执行 CREATE TABLE ... AS、SELECT INTO 和 CREATE MATERIALIZED VIEW 命令

服务器 / 并行查询

允许并行执行 CREATE TABLE ... AS、SELECT INTO 和 CREATE MATERIALIZED VIEW 命令(Haribabu Kommi)

性能改进提高使用大量并行工作进程时顺序扫描的性能

服务器 / 并行查询

提高使用大量并行工作进程时顺序扫描的性能(David Rowley)

新功能在 EXPLAIN 中添加并行工作进程排序活动的报告

服务器 / 并行查询

在 EXPLAIN 中添加并行工作进程排序活动的报告(Robert Haas,Tom Lane)

新功能允许 B-树索引包含不属于搜索键或唯一约束、但可供仅索引扫描读取的列

服务器 / 索引

允许 B-树索引包含不属于搜索键或唯一约束、但可供仅索引扫描读取的列(Anastasia Lubennikova,Alexander Korotkov,Teodor Sigaev)

这通过 CREATE INDEX 的新 INCLUDE 子句启用。它便于构建优化特定查询类型的“覆盖索引”。即使列的数据类型不支持 B-树,也可以将其包含在内。

性能改进提高单调递增的索引插入的性能

服务器 / 索引

提高单调递增的索引插入的性能(Pavan Deolasee,Peter Geoghegan)

性能改进提高 hash 索引扫描的性能

服务器 / 索引

提高 hash 索引扫描的性能(Ashutosh Sharma)

新功能为 hash、GiST 和 GIN 索引添加谓词锁定

服务器 / 索引

为 hash、GiST 和 GIN 索引添加谓词锁定(Shubham Barai)

这降低了可串行化模式事务发生串行化冲突的可能性。

新功能添加前缀匹配操作符 text ^@ text,并由 SP-GiST 支持

服务器 / 索引 / SP-Gist

添加前缀匹配操作符 text ^@ text,并由 SP-GiST 支持(Ildus Kurbangaliev)

这类似于配合 B-树索引使用 var LIKE 'word%',但效率更高。

新功能允许使用 SP-GiST 对多边形建立索引

服务器 / 索引 / SP-Gist

允许使用 SP-GiST 对多边形建立索引(Nikita Glukhov,Alexander Korotkov)

新功能允许 SP-GiST 对叶子键使用有损表示

服务器 / 索引 / SP-Gist

允许 SP-GiST 对叶子键使用有损表示(Teodor Sigaev,Heikki Linnakangas,Alexander Korotkov,Nikita Glukhov)

新功能改进统计信息中高频值的选择

服务器 / 优化器

改进统计信息中高频值的选择(Jeff Janes,Dean Rasheed)

以前,根据某个值相对于所有列值的频率来识别高频值(MCV)。现在,根据其相对于非 MCV 值的频率选择 MCV。这提高了算法在均匀分布和非均匀分布下的稳健性。

新功能改进 >= 和 <= 的选择率估算

服务器 / 优化器

改进 >= 和 <= 的选择率估算(Tom Lane)

以前,除非比较常量为 MCV,这些情况分别采用与 > 和 < 相同的选择率估算。此更改对涉及小范围 BETWEEN 的查询尤其有帮助。

新功能在等价的情况下,将 var = var 简化为 var IS NOT NULL

服务器 / 优化器

在等价的情况下,将 var = var 简化为 var IS NOT NULL(Tom Lane)

这会改善选择率估算。

新功能改进优化器对 EXISTS 和 NOT EXISTS 查询的行数估算

服务器 / 优化器

改进优化器对 EXISTS 和 NOT EXISTS 查询的行数估算(Tom Lane)

新功能使优化器考虑 HAVING 子句的求值代价和选择率

服务器 / 优化器

使优化器考虑 HAVING 子句的求值代价和选择率(Tom Lane)

性能改进为查询计划的某些部分添加即时(JIT)编译,以提高执行速度

服务器 / 一般性能

为查询计划的某些部分添加即时(JIT)编译,以提高执行速度(Andres Freund)

此特性要求 LLVM 可用。目前,即使构建支持它,默认也不启用。

性能改进允许位图扫描在可能时执行仅索引扫描

服务器 / 一般性能

允许位图扫描在可能时执行仅索引扫描(Alexander Kuzmenkov)

性能改进在 VACUUM 期间更新空闲空间映射

服务器 / 一般性能

在 VACUUM 期间更新空闲空间映射(Claudio Freire)

这使空闲空间能够更快地被复用。

性能改进允许 VACUUM 避免不必要的索引扫描

服务器 / 一般性能

允许 VACUUM 避免不必要的索引扫描(Masahiko Sawada,Alexander Korotkov)

性能改进提高提交多个并发事务的性能

服务器 / 一般性能

提高提交多个并发事务的性能(Amit Kapila)

性能改进减少目标列表中使用返回集合函数的查询的内存用量

服务器 / 一般性能

减少目标列表中使用返回集合函数的查询的内存用量(Andres Freund)

性能改进提高聚合计算的速度

服务器 / 一般性能

提高聚合计算的速度(Andres Freund)

性能改进允许 postgres_fdw 将使用连接的 UPDATE 和 DELETE 下推到外部服务器

服务器 / 一般性能

允许 postgres_fdw 将使用连接的 UPDATE 和 DELETE 下推到外部服务器(Etsuro Fujita)

以前,只会下推不含连接的 UPDATE 和 DELETE。

性能改进添加对 Windows 上大页的支持

服务器 / 一般性能

添加对 Windows 上大页的支持(Takayuki Tsunakawa,Thomas Munro)

这由 huge_pages 配置参数控制。

新功能在 log_statement_stats、log_parser_stats、log_planner_stats 和 log_executor_stats 的输出中显示内存用量

服务器 / 监控

在 log_statement_stats、log_parser_stats、log_planner_stats 和 log_executor_stats 的输出中显示内存用量(Justin Pryzby,Peter Eisentraut)

新功能添加 pg_stat_activity.backend_type 列,以显示后台工作进程的类型

服务器 / 监控

添加 pg_stat_activity.backend_type 列,以显示后台工作进程的类型(Peter Eisentraut)

该类型在 ps 输出中也可见。

新功能使 log_autovacuum_min_duration 记录因正被并发删除而跳过的表

服务器 / 监控

使 log_autovacuum_min_duration 记录因正被并发删除而跳过的表(Nathan Bossart)

新功能添加与表约束和触发器相关的 information_schema 列

服务器 / 监控 / 信息模式

添加与表约束和触发器相关的 information_schema 列(Peter Eisentraut)

具体而言,triggers.action_order、triggers.action_reference_old_table 和 triggers.action_reference_new_table 现在会填入值,而以前始终为空。此外,table_constraints.enforced 列现在已存在,但尚未填入有用的值。

新功能允许服务器在 search+bind 模式下使用更复杂的 LDAP 配置

服务器 / Authentication

允许服务器在 search+bind 模式下使用更复杂的 LDAP 配置(Thomas Munro)

具体而言,ldapsearchfilter 允许组合 LDAP 属性进行模式匹配。

新功能允许 LDAP 认证使用加密的 LDAP

服务器 / Authentication

允许 LDAP 认证使用加密的 LDAP(Thomas Munro)

以前已可通过 ldaptls=1 支持基于 TLS 的 LDAP。这种用于加密 LDAP 的新 TLS LDAP 方式,通过 ldapscheme=ldaps 或 ldapurl=ldaps:// 启用。

新功能改进 LDAP 错误的日志记录

服务器 / Authentication

改进 LDAP 错误的日志记录(Thomas Munro)

新功能添加允许文件系统访问的默认角色

服务器 / 权限

添加允许文件系统访问的默认角色(Stephen Frost)

具体来说,新增角色是 pg_read_server_files、pg_write_server_files 和 pg_execute_server_program。这些角色现在还控制谁可以使用服务器端的 COPY 和 file_fdw 扩展。以前,只有超级用户可以使用这些功能,现在默认行为仍然如此。

新功能允许通过 GRANT/REVOKE 权限控制对文件系统函数的访问,取代超级用户检查

服务器 / 权限

允许通过 GRANT/REVOKE 权限控制对文件系统函数的访问,取代超级用户检查(Stephen Frost)

具体而言,修改了以下函数:pg_ls_dir()、pg_read_file()、pg_read_binary_file()、pg_stat_file()。

新功能使用 GRANT/REVOKE 控制对 lo_import() 和 lo_export() 的访问

服务器 / 权限

使用 GRANT/REVOKE 控制对 lo_import() 和 lo_export() 的访问(Michael Paquier,Tom Lane)

以前,只有超级用户获准访问这些函数。

编译时选项 ALLOW_DANGEROUS_LO_FUNCTIONS 已被移除。

关联记录(1)

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

新功能在阻止以非密码方式访问 postgres_fdw 表时,使用视图所有者而非会话所有者

服务器 / 权限

在阻止以非密码方式访问 postgres_fdw 表时,使用视图所有者而非会话所有者(Robert Haas)

PostgreSQL 只允许超级用户在不使用密码的情况下访问 postgres_fdw 表,例如通过 peer 认证。以前,要允许此类访问,会话所有者必须是超级用户;现在改为检查视图所有者。

BUG 修复修复对视图执行 SELECT FOR UPDATE 时无效的锁定权限检查

服务器 / 权限

修复对视图执行 SELECT FOR UPDATE 时无效的锁定权限检查(Tom Lane)

新功能添加服务器设置 ssl_passphrase_command,以允许为 SSL 密钥文件提供口令

服务器 / 服务器配置

添加服务器设置 ssl_passphrase_command,以允许为 SSL 密钥文件提供口令(Peter Eisentraut)

同时添加 ssl_passphrase_command_supports_reload,用于指定服务器配置重新加载期间,是否应重新加载 SSL 配置并调用 ssl_passphrase_command。

新功能添加存储参数 toast_tuple_target,以控制开始考虑 TOAST 存储的最小元组长度

服务器 / 服务器配置

添加存储参数 toast_tuple_target,以控制开始考虑 TOAST 存储的最小元组长度(Simon Riggs)

默认的 TOAST 阈值没有改变。

新功能允许以字节为单位指定与内存和文件大小相关的服务器选项

服务器 / 服务器配置

允许以字节为单位指定与内存和文件大小相关的服务器选项(Beena Emerson)

新增单位后缀为 “B”,与现有的 “kB”、“MB”、“GB” 和 “TB” 并用。

新功能允许在 initdb 期间设置 WAL 文件大小

服务器 / 预写式日志(WAL)

允许在 initdb 期间设置 WAL 文件大小(Beena Emerson)

以前,16MB 的默认值只能在编译时更改。

新功能仅保留一个检查点周期的 WAL 数据

服务器 / 预写式日志(WAL)

仅保留一个检查点周期的 WAL 数据(Simon Riggs)

以前,会保留两个检查点周期的 WAL。

新功能将被强制切换的 WAL 段文件的未使用部分填零,以提高可压缩性

服务器 / 预写式日志(WAL)

将被强制切换的 WAL 段文件的未使用部分填零,以提高可压缩性(Chapman Flack)

新功能使用逻辑复制时复制 TRUNCATE 操作

基础备份与流复制

使用逻辑复制时复制 TRUNCATE 操作(Simon Riggs,Marco Nenciarini,Peter Eisentraut)

新功能将预备事务信息传递给逻辑复制订阅者

基础备份与流复制

将预备事务信息传递给逻辑复制订阅者(Nikhil Sontakke,Stas Kelvich)

新功能从流式基础备份中排除不记录 WAL 的表、临时表和 pg_internal.init 文件

基础备份与流复制

从流式基础备份中排除不记录 WAL 的表、临时表和 pg_internal.init 文件(David Steele)

没有必要复制此类文件。

新功能允许在流式基础备份期间验证堆页面的校验和

基础备份与流复制

允许在流式基础备份期间验证堆页面的校验和(Michael Banck)

新功能允许以编程方式推进复制槽,而无需由订阅者消费

基础备份与流复制

允许以编程方式推进复制槽,而无需由订阅者消费(Petr Jelinek)

这使复制槽在内容无需被消费时能够高效推进。相应操作通过 pg_replication_slot_advance() 执行。

新功能向 backup_label 文件添加时间线信息

基础备份与流复制

向 backup_label 文件添加时间线信息(Michael Paquier)

同时添加检查,确保 WAL 时间线与 backup_label 文件的时间线匹配。

新功能向 pg_stat_wal_receiver 系统视图添加主机和端口连接信息

基础备份与流复制

向 pg_stat_wal_receiver 系统视图添加主机和端口连接信息(Haribabu Kommi)

新功能允许 ALTER TABLE 添加具有非空默认值的列,而无需重写表

工具命令

允许 ALTER TABLE 添加具有非空默认值的列,而无需重写表(Andrew Dunstan,Serge Rielau)

默认值为常量时会启用此优化。

新功能允许通过锁定底层表来锁定视图

工具命令

允许通过锁定底层表来锁定视图(Yugo Nagata)

新功能允许 ALTER INDEX 设置表达式索引的统计收集目标

工具命令

允许 ALTER INDEX 设置表达式索引的统计收集目标(Alexander Korotkov,Adrien Nayrat)

在 psql 中,\d+ 现在会显示索引的统计目标。

新功能允许在一条 VACUUM 或 ANALYZE 命令中指定多个表

工具命令

允许在一条 VACUUM 或 ANALYZE 命令中指定多个表(Nathan Bossart)

此外,如果 VACUUM 中提到的任何表使用了列列表,就必须提供 ANALYZE 关键字;以前,此类情况会隐含执行 ANALYZE。

新功能为 ANALYZE 添加括号包围的选项语法

工具命令

为 ANALYZE 添加括号包围的选项语法(Nathan Bossart)

这与 VACUUM 支持的语法类似。

新功能添加 CREATE AGGREGATE 选项,以指定聚合最终函数的行为

工具命令

添加 CREATE AGGREGATE 选项,以指定聚合最终函数的行为(Tom Lane)

这有助于优化用户定义的聚合函数,并使其能够用作窗口函数。

新功能允许创建域的数组

数据类型

允许创建域的数组(Tom Lane)

这也允许对域使用 array_agg()。

新功能支持基于复合类型的域

数据类型

支持基于复合类型的域(Tom Lane)

同时允许 PL/Perl、PL/Python 和 PL/Tcl 处理复合类型域的函数参数和结果,并改进 PL/Python 的域处理。

新功能添加从 JSONB 标量到数值和布尔数据类型的类型转换

数据类型

添加从 JSONB 标量到数值和布尔数据类型的类型转换(Anastasia Lubennikova)

新功能添加 SQL:2011 规定的所有窗口函数帧选项

函数

添加 SQL:2011 规定的所有窗口函数帧选项(Oliver Ford,Tom Lane)

具体而言,允许 RANGE 模式使用 PRECEDING 和 FOLLOWING,选取分组值位于加减指定偏移量范围内的行。添加 GROUPS 模式,以包含前后指定数量的同等行组。同时添加了帧排除语法。

新功能添加 SHA-2 系列 hash 函数

函数

添加 SHA-2 系列 hash 函数(Peter Eisentraut)

具体添加了 sha224()、sha256()、sha384() 和 sha512()。

新功能添加对 64 位非密码学 hash 函数的支持

函数

添加对 64 位非密码学 hash 函数的支持(Robert Haas,Amul Sul)

新功能允许 to_char() 和 to_timestamp() 以小时和分钟指定时区相对于 UTC 的偏移量

函数

允许 to_char() 和 to_timestamp() 以小时和分钟指定时区相对于 UTC 的偏移量(Nikita Glukhov,Andrew Dunstan)

这通过格式指定符 TZH 和 TZM 完成。

新功能添加文本检索函数 websearch_to_tsquery(),支持类似网页搜索引擎所用的查询语法

函数

添加文本检索函数 websearch_to_tsquery(),支持类似网页搜索引擎所用的查询语法(Victor Drobny,Dmitry Ivanov)

新功能添加函数 json(b)_to_tsvector(),以创建用于匹配 JSON/JSONB 值的文本检索查询

函数

添加函数 json(b)_to_tsvector(),以创建用于匹配 JSON/JSONB 值的文本检索查询(Dmitry Dolgov)

新功能添加 SQL 级过程,使其能够开始并提交自己的事务

服务器端语言

添加 SQL 级过程,使其能够开始并提交自己的事务(Peter Eisentraut)

它们使用新的 CREATE PROCEDURE 命令创建,并通过 CALL 调用。

新的 ALTER/DROP ROUTINE 命令允许更改/删除所有例程类对象,包括过程、函数和聚合。

另外,在 CREATE OPERATOR 和 CREATE TRIGGER 中,现在推荐使用 FUNCTION 而非 PROCEDURE,因为所引用的对象必须是函数,而不能是过程。不过,为保持兼容,仍然接受旧语法。

新功能为 PL/pgSQL、PL/Perl、PL/Python、PL/Tcl 和 SPI 服务器端语言添加事务控制

服务器端语言

为 PL/pgSQL、PL/Perl、PL/Python、PL/Tcl 和 SPI 服务器端语言添加事务控制(Peter Eisentraut)

事务控制仅可用于事务顶层的过程,以及嵌套的 DO 和 CALL 块;嵌套层次中只能包含其他 DO 和 CALL 块。

新功能添加将 PL/pgSQL 复合类型变量定义为非空、常量或带初始值的能力

服务器端语言

添加将 PL/pgSQL 复合类型变量定义为非空、常量或带初始值的能力(Tom Lane)

新功能允许 PL/pgSQL 处理同一会话中首次和后续函数执行之间发生的复合类型(如 record、row)变更

服务器端语言

允许 PL/pgSQL 处理同一会话中首次和后续函数执行之间发生的复合类型(如 record、row)变更(Tom Lane)

以前,这类情况会产生错误。

关联记录(1)

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

新功能添加扩展 jsonb_plpython,以在 JSONB 和 PL/Python 类型之间进行转换

服务器端语言

添加扩展 jsonb_plpython,以在 JSONB 和 PL/Python 类型之间进行转换(Anthony Bykov)

新功能添加扩展 jsonb_plperl,以在 JSONB 和 PL/Perl 类型之间进行转换

服务器端语言

添加扩展 jsonb_plperl,以在 JSONB 和 PL/Perl 类型之间进行转换(Anthony Bykov)

新功能更改 libpq,使其默认禁用压缩

客户端接口

更改 libpq,使其默认禁用压缩(Peter Eisentraut)

现代 OpenSSL 版本已禁用压缩,因此 libpq 的这一设置对这些库并无影响。

新功能为 ecpg 的 WHENEVER 语句添加 DO CONTINUE 选项

客户端接口

为 ecpg 的 WHENEVER 语句添加 DO CONTINUE 选项(Vinayak Pokale)

这会生成 C continue 语句,在指定条件发生时返回所在循环的顶部。

新功能添加 ecpg 模式,以启用 Oracle Pro*C 风格的字符数组处理。

客户端接口

添加 ecpg 模式,以启用 Oracle Pro*C 风格的字符数组处理。

此模式通过 -C 启用。

新功能添加 psql 命令 \gdesc,以显示查询结果中各列的名称和类型

客户端应用程序 / psql

添加 psql 命令 \gdesc,以显示查询结果中各列的名称和类型(Pavel Stehule)

新功能添加 psql 变量,以报告查询活动和错误

客户端应用程序 / psql

添加 psql 变量,以报告查询活动和错误(Fabien Coelho)

具体新增变量为 ERROR、SQLSTATE、ROW_COUNT、LAST_ERROR_MESSAGE 和 LAST_ERROR_SQLSTATE。

新功能允许 psql 测试变量是否存在

客户端应用程序 / psql

允许 psql 测试变量是否存在(Fabien Coelho)

具体而言,语法 :{?variable_name} 允许在 \if 语句中测试变量是否存在。

新功能允许环境变量 PSQL_PAGER 控制 psql 的分页器

客户端应用程序 / psql

允许环境变量 PSQL_PAGER 控制 psql 的分页器(Pavel Stehule)

这允许用独立的环境变量指定 psql 的默认分页器,将其与其他应用的分页器设置分开。如果未设置 PSQL_PAGER,仍会遵循 PAGER。

新功能使 psql 的 \d+ 命令始终显示表的分区信息

客户端应用程序 / psql

使 psql 的 \d+ 命令始终显示表的分区信息(Amit Langote,Ashutosh Bapat)

以前,如果分区表没有分区,就不会显示其分区信息。现在还会指出哪些分区本身也是分区表。

新功能确保 psql 在提示输入密码时显示正确的用户名

客户端应用程序 / psql

确保 psql 在提示输入密码时显示正确的用户名(Tom Lane)

以前,同时使用 -U 和嵌入 URI 的用户名会导致显示错误的用户名。另外,在指定 --password 时,不再在密码提示前显示用户名。

新功能在此前没有输入的情况下,允许 quit 和 exit 退出 psql

客户端应用程序 / psql

在此前没有输入的情况下,允许 quit 和 exit 退出 psql(Bruce Momjian)

当输入缓冲区非空,而 quit 和 exit 单独出现在一行时,也会输出如何退出的提示。为 help 添加类似提示。

新功能当 \q 单独输入在一行上却被忽略时,让 psql 提示使用 control-D

客户端应用程序 / psql

当 \q 单独输入在一行上却被忽略时,让 psql 提示使用 control-D(Bruce Momjian)

例如,在字符串内输入 \q 不会退出。

新功能改进 ALTER INDEX RESET/SET 的 Tab 补全

客户端应用程序 / psql

改进 ALTER INDEX RESET/SET 的 Tab 补全(Masahiko Sawada)

新功能添加基础支持,使 psql 能够根据服务器版本调整 Tab 补全查询

客户端应用程序 / psql

添加基础支持,使 psql 能够根据服务器版本调整 Tab 补全查询(Tom Lane)

以前,对旧版服务器执行 Tab 补全查询可能失败。

新功能为 pgbench 表达式添加对 NULL、布尔值以及某些函数和操作符的支持

客户端应用程序 / pgbench

为 pgbench 表达式添加对 NULL、布尔值以及某些函数和操作符的支持(Fabien Coelho)

新功能为 pgbench 添加 \if 条件支持

客户端应用程序 / pgbench

为 pgbench 添加 \if 条件支持(Fabien Coelho)

新功能允许在 pgbench 变量名中使用非 ASCII 字符

客户端应用程序 / pgbench

允许在 pgbench 变量名中使用非 ASCII 字符(Fabien Coelho)

新功能添加 pgbench 选项 --init-steps,以控制执行哪些初始化步骤

客户端应用程序 / pgbench

添加 pgbench 选项 --init-steps,以控制执行哪些初始化步骤(Masahiko Sawada)

新功能为 pgbench 添加近似服从 Zipf 分布的随机数生成器

客户端应用程序 / pgbench

为 pgbench 添加近似服从 Zipf 分布的随机数生成器(Alik Khilazhev)

新功能允许在 pgbench 中设置随机种子

客户端应用程序 / pgbench

允许在 pgbench 中设置随机种子(Fabien Coelho)

新功能允许 pgbench 使用 pow() 和 power() 执行幂运算

客户端应用程序 / pgbench

允许 pgbench 使用 pow() 和 power() 执行幂运算(Raúl Marín Rodríguez)

新功能为 pgbench 添加 hash 函数

客户端应用程序 / pgbench

为 pgbench 添加 hash 函数(Ildar Musin)

新功能提高使用 --latency-limit 和 --rate 时 pgbench 统计信息的准确性

客户端应用程序 / pgbench

提高使用 --latency-limit 和 --rate 时 pgbench 统计信息的准确性(Fabien Coelho)

新功能为pg_basebackup添加创建命名复制槽的选项

服务器应用程序

为pg_basebackup添加创建命名复制槽的选项(Michael Banck)

使用 WAL 流式方法(--wal-method=stream)时,--create-slot 选项会创建指定名称的复制槽(--slot)。

新功能允许initdb为数据目录设置组读取权限

服务器应用程序

允许initdb为数据目录设置组读取权限(David Steele)

这通过新的 initdb 选项 --allow-group-access 完成。管理员也可以在运行 initdb 之前,为空数据目录设置组权限。服务器变量 data_directory_mode 允许读取数据目录的组权限。

新功能添加pg_verify_checksums工具,以在离线状态下验证数据库校验和

服务器应用程序

添加pg_verify_checksums工具,以在离线状态下验证数据库校验和(Magnus Hagander)

新功能允许pg_resetwal通过 --wal-segsize 更改 WAL 段大小

服务器应用程序

允许pg_resetwal通过 --wal-segsize 更改 WAL 段大小(Nathan Bossart)

新功能为 pg_resetwal 和 pg_controldata 添加长选项

服务器应用程序

为 pg_resetwal 和 pg_controldata 添加长选项(Nathan Bossart,Peter Eisentraut)

新功能为pg_receivewal添加 --no-sync 选项,用于测试时禁止同步 WAL 写入

服务器应用程序

为pg_receivewal添加 --no-sync 选项,用于测试时禁止同步 WAL 写入(Michael Paquier)

新功能添加 pg_receivewal 选项 --endpos,以指定何时停止接收 WAL

服务器应用程序

添加 pg_receivewal 选项 --endpos,以指定何时停止接收 WAL(Michael Paquier)

新功能允许pg_ctl向进程发送 SIGKILL 信号

服务器应用程序

允许pg_ctl向进程发送 SIGKILL 信号(Andres Freund)

以前因担心可能被误用而不支持此功能。

新功能减少pg_rewind复制的文件数量

服务器应用程序

减少pg_rewind复制的文件数量(Michael Paquier)

新功能禁止以 root 身份运行 pg_rewind

服务器应用程序

禁止以 root 身份运行 pg_rewind(Michael Paquier)

新功能添加 pg_dumpall 选项 --encoding,以控制输出编码

服务器应用程序 / pg_dump, pg_dumpall, pg_restore

添加 pg_dumpall 选项 --encoding,以控制输出编码(Michael Paquier)

pg_dump 已有此选项。

新功能添加 pg_dump 选项 --load-via-partition-root,强制将数据加载到分区的根表,而非原分区

服务器应用程序 / pg_dump, pg_dumpall, pg_restore

添加 pg_dump 选项 --load-via-partition-root,强制将数据加载到分区的根表,而非原分区(Rushabh Lathia)

当加载目标系统具有不同的排序规则定义或字节序,可能需要将行存储到与以前不同的分区时,此选项很有用。

新功能添加禁止转储和恢复数据库对象注释的选项

服务器应用程序 / pg_dump, pg_dumpall, pg_restore

添加禁止转储和恢复数据库对象注释的选项(Robins Tharakan)

pg_dump、pg_dumpall 和 pg_restore 的新选项为 --no-comments。

新功能为 PGXS 添加安装包含文件的支持

源代码

为 PGXS 添加安装包含文件的支持(Andrew Gierth)

这支持创建依赖其他模块的扩展模块。以前,依赖模块没有简单的方法找到被引用模块的包含文件。若干定义了数据类型的现有 contrib 模块已作调整,以安装相关文件。此外,PL/Perl 和 PL/Python 现在也会安装其包含文件,以支持创建这些语言的转换模块。

新功能安装 errcodes.txt,使扩展可以访问 PostgreSQL 已知的错误码列表

源代码

安装 errcodes.txt,使扩展可以访问 PostgreSQL 已知的错误码列表(Thomas Munro)

新功能将文档转换为 DocBook XML

源代码

将文档转换为 DocBook XML(Peter Eisentraut,Alexander Lakhin,Jürgen Purtz)

为与旧分支保持兼容,文件名仍使用 sgml 扩展名。

新功能在适用的平台(即大多数平台)上,使用 stdbool.h 定义 bool 类型

源代码

在适用的平台(即大多数平台)上,使用 stdbool.h 定义 bool 类型(Peter Eisentraut)

这消除了需要包含 stdbool.h 的扩展模块的一项编码隐患。

新功能全面调整初始系统目录内容的定义方式

源代码

全面调整初始系统目录内容的定义方式(John Naylor)

初始数据现在用 Perl 数据结构表示,更便于机械化处理。

新功能禁止扩展创建接受带引号值列表的自定义服务器参数

源代码

禁止扩展创建接受带引号值列表的自定义服务器参数(Tom Lane)

目前无法支持这种功能,因为在加载扩展之前就必须知道该参数的这一属性。

新功能增加在使用SCRAM认证时使用通道绑定的能力

源代码

增加在使用SCRAM认证时使用通道绑定的能力(Michael Paquier)

通道绑定旨在防止中间人攻击,但除非能够强制启用通道绑定,否则 SCRAM 无法防止此类攻击。遗憾的是,libpq 中没有办法做到这一点。预计未来版本的 libpq,以及不基于 libpq 构建的接口(例如 JDBC)将支持此功能。

新功能允许后台工作进程连接到通常不允许连接的数据库

源代码

允许后台工作进程连接到通常不允许连接的数据库(Magnus Hagander)

新功能添加对 ARMv8 上硬件 CRC 计算的支持

源代码

添加对 ARMv8 上硬件 CRC 计算的支持(Yuqi Gu,Heikki Linnakangas,Thomas Munro)

性能改进加快按 OID 查找内置函数的速度

源代码

加快按 OID 查找内置函数的速度(Andres Freund)

以前的二分查找已被查找数组取代。

性能改进加快查询结果的构建速度

源代码

加快查询结果的构建速度(Andres Freund)

新功能提高系统缓存访问速度

源代码

提高系统缓存访问速度(Andres Freund)

新功能添加针对顺序分配/释放优化的分代内存分配器

源代码

添加针对顺序分配/释放优化的分代内存分配器(Tomas Vondra)

这减少了逻辑解码的内存用量。

新功能使 VACUUM 对 pg_class.reltuples 的计算与 ANALYZE 一致

源代码

使 VACUUM 对 pg_class.reltuples 的计算与 ANALYZE 一致(Tomas Vondra)

新功能更新为使用 perltidy 20170521 版

源代码

更新为使用 perltidy 20170521 版(Tom Lane,Peter Eisentraut)

新功能允许扩展 pg_prewarm 在启动时恢复先前的共享缓冲区内容

附加模块

允许扩展 pg_prewarm 在启动时恢复先前的共享缓冲区内容(Mithun Cy,Robert Haas)

实现方式是让 pg_prewarm 在服务器运行期间不时地、并在关闭时,将共享缓冲区的关系和块号数据存储到磁盘。

新功能添加 pg_trgm 函数 strict_word_similarity(),以计算完整单词的相似度

附加模块

添加 pg_trgm 函数 strict_word_similarity(),以计算完整单词的相似度(Alexander Korotkov)

已有的 word_similarity() 函数也用于此目的,但它的设计是寻找单词中相似的部分,而 strict_word_similarity() 计算的是与完整单词的相似度。

新功能允许 btree_gin 对 bool、bpchar、name 和 uuid 数据类型建立索引

附加模块

允许 btree_gin 对 bool、bpchar、name 和 uuid 数据类型建立索引(Matheus Oliveira)

新功能允许 cube 和 seg 扩展使用 GiST 索引执行仅索引扫描

附加模块

允许 cube 和 seg 扩展使用 GiST 索引执行仅索引扫描(Andrey Borodin)

新功能允许使用 ~> 操作符获取 cube 坐标的负值

附加模块

允许使用 ~> 操作符获取 cube 坐标的负值(Alexander Korotkov)

这对按降序查找坐标的 KNN-GiST 搜索很有用。

新功能为 unaccent 扩展添加越南语字母处理

附加模块

为 unaccent 扩展添加越南语字母处理(Dang Minh Huong,Michael Paquier)

新功能增强 amcheck,以检查每个堆元组都有对应的索引条目

附加模块

增强 amcheck,以检查每个堆元组都有对应的索引条目(Peter Geoghegan)

新功能让 adminpack 使用新的默认文件系统访问角色

附加模块

让 adminpack 使用新的默认文件系统访问角色(Stephen Frost)

以前,只有超级用户可以调用 adminpack 函数;现在改为检查角色权限。

关联记录(1)

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

新功能将 pg_stat_statement 的查询 ID 扩为 64 位

附加模块

将 pg_stat_statement 的查询 ID 扩为 64 位(Robert Haas)

这大幅降低了查询 ID hash 冲突的概率。查询 ID 现在可能显示为负值。

新功能移除已不再推荐使用的 contrib/start-scripts/osx 脚本(改用 contrib/start-scripts/macos)

附加模块

移除已不再推荐使用的 contrib/start-scripts/osx 脚本(改用 contrib/start-scripts/macos)(Tom Lane)

新功能移除 chkpass 扩展

附加模块

移除 chkpass 扩展(Peter Eisentraut)

此扩展不再被视为可用的安全工具或编写扩展的示例。

这份对比如何生成?

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

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

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

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

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