pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。
本次发布的全部变更
2018-10-18
11.0 历史版本维护截止 2023-11-09
对于希望从任何先前版本迁移数据的用户,需要使用pg_dumpall进行导出/恢复,或使用pg_upgrade或逻辑复制。有关迁移到新主版本的一般信息,请参见第 18.6 节。
版本 11 包含许多可能影响与先前版本兼容性的变更。请注意以下不兼容性:
兼容性
使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 输入(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() 消耗字符(Oliver Ford)
具体而言,SELECT to_number('1234', '9,999') 以前返回 134,现在会返回 1234。L 和 TH 现在只消耗数字、正负号、小数点和逗号以外的字符。
兼容性
修复 to_date()、to_number() 和 to_timestamp(),使其对每个模板字符跳过一个字符(Tom Lane)
以前,它们对模板字符的每个字节跳过一个字节,如果任一字符串包含多字节字符,就会出现异常行为。
兼容性
调整 to_char()、to_number() 和 to_timestamp() 对模板字符串中双引号内反斜线的处理。
这种反斜线现在会转义其后的字符,尤其是双引号或另一个反斜线。
兼容性
正确处理 xmltable()、xpath() 及其他 XML 处理函数中的相对路径表达式(Markus Winand)
按照 SQL 标准,相对路径从 XML 输入文档的文档节点开始,而非像这些函数以前那样从根节点开始。
兼容性
在扩展查询协议中,使 statement_timeout 分别应用于每条 Execute 消息,而非应用于 Sync 之前的所有命令(Tatsuo Ishii,Andres Freund)
兼容性
从系统目录 pg_class 中移除 relhaspkey 列(Peter Eisentraut)
需要检查主键的应用应查询 pg_index。
兼容性
将系统目录 pg_proc 的 proisagg 和 proiswindow 列替换为 prokind(Peter Eisentraut)
这个新列更清楚地区分了函数、过程、聚合和窗口函数。
兼容性
修正信息模式列 tables.table_type,使其返回 FOREIGN 而非 FOREIGN TABLE(Peter Eisentraut)
这种新输出符合 SQL 标准。
兼容性
更改 ps 进程显示中的后台工作进程标签,使其与 pg_stat_activity.backend_type 标签一致(Peter Eisentraut)
兼容性
在通过 lo_open() 打开大对象时检查大对象权限,而非在尝试读写时检查(Tom Lane,Michael Paquier)
如果请求写入权限但无法获得,现在即使最终从未写入该大对象,也会抛出错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
兼容性
防止非超级用户重建共享目录的索引(Michael Paquier,Robert Haas)
以前,数据库所有者也被允许这样做,但现在认为这超出了其权限范围。
兼容性
移除已弃用的 adminpack 函数 pg_file_read()、pg_file_length() 和 pg_logfile_rotate()(Stephen Frost)
核心后端现在已提供等效功能。现有 adminpack 安装在通过 ALTER EXTENSION ... UPDATE 更新之前,仍可访问这些函数。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
兼容性
遵循双引号内命令选项的大小写(Daniel Gustafsson)
以前,某些 SQL 命令中的选项名即使以双引号输入,也会被强制转换为小写;因此,例如 "FillFactor" 会被接受为索引存储选项,尽管其正确名称应为小写。现在,此类情况将产生错误。
兼容性
移除服务器参数 replacement_sort_tuples(Peter Geoghegan)
经判断,置换排序已不再有用。
兼容性
移除 CREATE FUNCTION 中的 WITH 子句(Michael Paquier)
PostgreSQL 很早以前就已支持更符合标准的语法来实现此功能。
兼容性
在 PL/pgSQL 触发器函数中,未赋值的 OLD 和 NEW 变量现在读取为 NULL(Tom Lane)
以前,对这些变量的引用可以解析,但无法执行。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
服务器 / 分区
允许根据键列的 hash 值创建分区(Amul Sul)
服务器 / 分区
支持分区表上的索引(Álvaro Herrera,Amit Langote)
分区表上的“索引”并非跨越整个分区表的物理索引,而是用于在表的每个分区上自动创建类似索引的模板。
如果索引列集合包含分区键,则可以将分区索引声明为 UNIQUE。它将表示覆盖整个分区表的有效唯一约束,尽管每个物理索引只在其自身分区内实施唯一性。
新命令 ALTER INDEX ATTACH PARTITION 将分区上的现有索引与其分区表的匹配索引模板关联起来。这为给现有分区表设置新的分区索引提供了灵活性。
服务器 / 分区
允许在分区表上定义外键(Álvaro Herrera)
服务器 / 分区
允许在分区表上定义 FOR EACH ROW 触发器(Álvaro Herrera)
在分区表上创建触发器,会自动在所有现有和未来分区上创建触发器。这也使分区表能够使用延迟唯一约束。
服务器 / 分区
允许分区表具有默认分区(Jeevan Ladhe,Beena Emerson,Ashutosh Bapat,Rahila Syed,Robert Haas)
默认分区存储不匹配其他任何已定义分区的行,并据此被搜索。
服务器 / 分区
更改分区键列的 UPDATE 语句现在会将受影响的行移动到适当的分区(Amit Khandekar)
服务器 / 分区
允许分区表上的 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 将聚合下推到作为分区的外部表(Jeevan Chalke)
服务器 / 并行查询
允许并行构建 B-树索引(Peter Geoghegan,Rushabh Lathia,Heikki Linnakangas)
服务器 / 并行查询
允许使用共享 hash 表并行执行哈希连接(Thomas Munro)
服务器 / 并行查询
如果各条 SELECT 无法分别并行化,则允许 UNION 并行运行各条 SELECT(Amit Khandekar,Robert Haas,Amul Sul)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
服务器 / 并行查询
允许分区扫描更高效地使用并行工作进程(Amit Khandekar,Robert Haas,Amul Sul)
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
服务器 / 并行查询
允许将 LIMIT 传递给并行工作进程(Robert Haas,Tom Lane)
这使工作进程能够减少返回结果,并使用有针对性的索引扫描。
服务器 / 并行查询
允许单次求值查询(例如 WHERE 子句中的聚合查询)以及目标列表中的函数并行执行(Amit Kapila,Robert Haas)
服务器 / 并行查询
添加服务器参数 parallel_leader_participation,以控制领导者是否也执行子计划(Thomas Munro)
默认启用,意味着领导者将执行子计划。
服务器 / 并行查询
允许并行执行 CREATE TABLE ... AS、SELECT INTO 和 CREATE MATERIALIZED VIEW 命令(Haribabu Kommi)
服务器 / 并行查询
提高使用大量并行工作进程时顺序扫描的性能(David Rowley)
服务器 / 并行查询
在 EXPLAIN 中添加并行工作进程排序活动的报告(Robert Haas,Tom Lane)
服务器 / 索引
允许 B-树索引包含不属于搜索键或唯一约束、但可供仅索引扫描读取的列(Anastasia Lubennikova,Alexander Korotkov,Teodor Sigaev)
这通过 CREATE INDEX 的新 INCLUDE 子句启用。它便于构建优化特定查询类型的“覆盖索引”。即使列的数据类型不支持 B-树,也可以将其包含在内。
服务器 / 索引
提高单调递增的索引插入的性能(Pavan Deolasee,Peter Geoghegan)
服务器 / 索引
提高 hash 索引扫描的性能(Ashutosh Sharma)
服务器 / 索引
为 hash、GiST 和 GIN 索引添加谓词锁定(Shubham Barai)
这降低了可串行化模式事务发生串行化冲突的可能性。
服务器 / 索引 / SP-Gist
添加前缀匹配操作符 text ^@ text,并由 SP-GiST 支持(Ildus Kurbangaliev)
这类似于配合 B-树索引使用 var LIKE 'word%',但效率更高。
服务器 / 索引 / SP-Gist
允许使用 SP-GiST 对多边形建立索引(Nikita Glukhov,Alexander Korotkov)
服务器 / 索引 / 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(Tom Lane)
这会改善选择率估算。
服务器 / 优化器
改进优化器对 EXISTS 和 NOT EXISTS 查询的行数估算(Tom Lane)
服务器 / 优化器
使优化器考虑 HAVING 子句的求值代价和选择率(Tom Lane)
服务器 / 一般性能
为查询计划的某些部分添加即时(JIT)编译,以提高执行速度(Andres Freund)
此特性要求 LLVM 可用。目前,即使构建支持它,默认也不启用。
服务器 / 一般性能
允许位图扫描在可能时执行仅索引扫描(Alexander Kuzmenkov)
服务器 / 一般性能
在 VACUUM 期间更新空闲空间映射(Claudio Freire)
这使空闲空间能够更快地被复用。
服务器 / 一般性能
允许 VACUUM 避免不必要的索引扫描(Masahiko Sawada,Alexander Korotkov)
服务器 / 一般性能
提高提交多个并发事务的性能(Amit Kapila)
服务器 / 一般性能
减少目标列表中使用返回集合函数的查询的内存用量(Andres Freund)
服务器 / 一般性能
提高聚合计算的速度(Andres Freund)
服务器 / 一般性能
允许 postgres_fdw 将使用连接的 UPDATE 和 DELETE 下推到外部服务器(Etsuro Fujita)
以前,只会下推不含连接的 UPDATE 和 DELETE。
服务器 / 一般性能
添加对 Windows 上大页的支持(Takayuki Tsunakawa,Thomas Munro)
这由 huge_pages 配置参数控制。
服务器 / 监控
在 log_statement_stats、log_parser_stats、log_planner_stats 和 log_executor_stats 的输出中显示内存用量(Justin Pryzby,Peter Eisentraut)
服务器 / 监控
添加 pg_stat_activity.backend_type 列,以显示后台工作进程的类型(Peter Eisentraut)
该类型在 ps 输出中也可见。
服务器 / 监控
使 log_autovacuum_min_duration 记录因正被并发删除而跳过的表(Nathan Bossart)
服务器 / 监控 / 信息模式
添加与表约束和触发器相关的 information_schema 列(Peter Eisentraut)
具体而言,triggers.action_order、triggers.action_reference_old_table 和 triggers.action_reference_new_table 现在会填入值,而以前始终为空。此外,table_constraints.enforced 列现在已存在,但尚未填入有用的值。
服务器 / Authentication
允许服务器在 search+bind 模式下使用更复杂的 LDAP 配置(Thomas Munro)
具体而言,ldapsearchfilter 允许组合 LDAP 属性进行模式匹配。
服务器 / Authentication
允许 LDAP 认证使用加密的 LDAP(Thomas Munro)
以前已可通过 ldaptls=1 支持基于 TLS 的 LDAP。这种用于加密 LDAP 的新 TLS LDAP 方式,通过 ldapscheme=ldaps 或 ldapurl=ldaps:// 启用。
服务器 / Authentication
改进 LDAP 错误的日志记录(Thomas Munro)
服务器 / 权限
允许通过 GRANT/REVOKE 权限控制对文件系统函数的访问,取代超级用户检查(Stephen Frost)
具体而言,修改了以下函数:pg_ls_dir()、pg_read_file()、pg_read_binary_file()、pg_stat_file()。
服务器 / 权限
使用 GRANT/REVOKE 控制对 lo_import() 和 lo_export() 的访问(Michael Paquier,Tom Lane)
以前,只有超级用户获准访问这些函数。
编译时选项 ALLOW_DANGEROUS_LO_FUNCTIONS 已被移除。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
服务器 / 权限
在阻止以非密码方式访问 postgres_fdw 表时,使用视图所有者而非会话所有者(Robert Haas)
PostgreSQL 只允许超级用户在不使用密码的情况下访问 postgres_fdw 表,例如通过 peer 认证。以前,要允许此类访问,会话所有者必须是超级用户;现在改为检查视图所有者。
服务器 / 权限
修复对视图执行 SELECT FOR UPDATE 时无效的锁定权限检查(Tom Lane)
服务器 / 服务器配置
添加服务器设置 ssl_passphrase_command,以允许为 SSL 密钥文件提供口令(Peter Eisentraut)
同时添加 ssl_passphrase_command_supports_reload,用于指定服务器配置重新加载期间,是否应重新加载 SSL 配置并调用 ssl_passphrase_command。
服务器 / 服务器配置
添加存储参数 toast_tuple_target,以控制开始考虑 TOAST 存储的最小元组长度(Simon Riggs)
默认的 TOAST 阈值没有改变。
服务器 / 服务器配置
允许以字节为单位指定与内存和文件大小相关的服务器选项(Beena Emerson)
新增单位后缀为 “B”,与现有的 “kB”、“MB”、“GB” 和 “TB” 并用。
服务器 / 预写式日志(WAL)
允许在 initdb 期间设置 WAL 文件大小(Beena Emerson)
以前,16MB 的默认值只能在编译时更改。
服务器 / 预写式日志(WAL)
仅保留一个检查点周期的 WAL 数据(Simon Riggs)
以前,会保留两个检查点周期的 WAL。
服务器 / 预写式日志(WAL)
将被强制切换的 WAL 段文件的未使用部分填零,以提高可压缩性(Chapman Flack)
基础备份与流复制
使用逻辑复制时复制 TRUNCATE 操作(Simon Riggs,Marco Nenciarini,Peter Eisentraut)
基础备份与流复制
将预备事务信息传递给逻辑复制订阅者(Nikhil Sontakke,Stas Kelvich)
基础备份与流复制
从流式基础备份中排除不记录 WAL 的表、临时表和 pg_internal.init 文件(David Steele)
没有必要复制此类文件。
基础备份与流复制
允许在流式基础备份期间验证堆页面的校验和(Michael Banck)
基础备份与流复制
允许以编程方式推进复制槽,而无需由订阅者消费(Petr Jelinek)
这使复制槽在内容无需被消费时能够高效推进。相应操作通过 pg_replication_slot_advance() 执行。
基础备份与流复制
向 backup_label 文件添加时间线信息(Michael Paquier)
同时添加检查,确保 WAL 时间线与 backup_label 文件的时间线匹配。
基础备份与流复制
向 pg_stat_wal_receiver 系统视图添加主机和端口连接信息(Haribabu Kommi)
工具命令
允许 ALTER TABLE 添加具有非空默认值的列,而无需重写表(Andrew Dunstan,Serge Rielau)
默认值为常量时会启用此优化。
工具命令
允许通过锁定底层表来锁定视图(Yugo Nagata)
工具命令
允许 ALTER INDEX 设置表达式索引的统计收集目标(Alexander Korotkov,Adrien Nayrat)
在 psql 中,\d+ 现在会显示索引的统计目标。
工具命令
允许在一条 VACUUM 或 ANALYZE 命令中指定多个表(Nathan Bossart)
此外,如果 VACUUM 中提到的任何表使用了列列表,就必须提供 ANALYZE 关键字;以前,此类情况会隐含执行 ANALYZE。
工具命令
为 ANALYZE 添加括号包围的选项语法(Nathan Bossart)
这与 VACUUM 支持的语法类似。
工具命令
添加 CREATE AGGREGATE 选项,以指定聚合最终函数的行为(Tom Lane)
这有助于优化用户定义的聚合函数,并使其能够用作窗口函数。
数据类型
允许创建域的数组(Tom Lane)
这也允许对域使用 array_agg()。
数据类型
支持基于复合类型的域(Tom Lane)
同时允许 PL/Perl、PL/Python 和 PL/Tcl 处理复合类型域的函数参数和结果,并改进 PL/Python 的域处理。
数据类型
添加从 JSONB 标量到数值和布尔数据类型的类型转换(Anastasia Lubennikova)
函数
添加 SQL:2011 规定的所有窗口函数帧选项(Oliver Ford,Tom Lane)
具体而言,允许 RANGE 模式使用 PRECEDING 和 FOLLOWING,选取分组值位于加减指定偏移量范围内的行。添加 GROUPS 模式,以包含前后指定数量的同等行组。同时添加了帧排除语法。
函数
添加 SHA-2 系列 hash 函数(Peter Eisentraut)
具体添加了 sha224()、sha256()、sha384() 和 sha512()。
函数
添加对 64 位非密码学 hash 函数的支持(Robert Haas,Amul Sul)
函数
允许 to_char() 和 to_timestamp() 以小时和分钟指定时区相对于 UTC 的偏移量(Nikita Glukhov,Andrew Dunstan)
这通过格式指定符 TZH 和 TZM 完成。
函数
添加文本检索函数 websearch_to_tsquery(),支持类似网页搜索引擎所用的查询语法(Victor Drobny,Dmitry Ivanov)
函数
添加函数 json(b)_to_tsvector(),以创建用于匹配 JSON/JSONB 值的文本检索查询(Dmitry Dolgov)
服务器端语言
添加 SQL 级过程,使其能够开始并提交自己的事务(Peter Eisentraut)
它们使用新的 CREATE PROCEDURE 命令创建,并通过 CALL 调用。
新的 ALTER/DROP ROUTINE 命令允许更改/删除所有例程类对象,包括过程、函数和聚合。
另外,在 CREATE OPERATOR 和 CREATE TRIGGER 中,现在推荐使用 FUNCTION 而非 PROCEDURE,因为所引用的对象必须是函数,而不能是过程。不过,为保持兼容,仍然接受旧语法。
服务器端语言
为 PL/pgSQL、PL/Perl、PL/Python、PL/Tcl 和 SPI 服务器端语言添加事务控制(Peter Eisentraut)
事务控制仅可用于事务顶层的过程,以及嵌套的 DO 和 CALL 块;嵌套层次中只能包含其他 DO 和 CALL 块。
服务器端语言
添加将 PL/pgSQL 复合类型变量定义为非空、常量或带初始值的能力(Tom Lane)
服务器端语言
允许 PL/pgSQL 处理同一会话中首次和后续函数执行之间发生的复合类型(如 record、row)变更(Tom Lane)
以前,这类情况会产生错误。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
服务器端语言
添加扩展 jsonb_plpython,以在 JSONB 和 PL/Python 类型之间进行转换(Anthony Bykov)
服务器端语言
添加扩展 jsonb_plperl,以在 JSONB 和 PL/Perl 类型之间进行转换(Anthony Bykov)
客户端接口
更改 libpq,使其默认禁用压缩(Peter Eisentraut)
现代 OpenSSL 版本已禁用压缩,因此 libpq 的这一设置对这些库并无影响。
客户端接口
为 ecpg 的 WHENEVER 语句添加 DO CONTINUE 选项(Vinayak Pokale)
这会生成 C continue 语句,在指定条件发生时返回所在循环的顶部。
客户端接口
添加 ecpg 模式,以启用 Oracle Pro*C 风格的字符数组处理。
此模式通过 -C 启用。
客户端应用程序 / psql
添加 psql 命令 \gdesc,以显示查询结果中各列的名称和类型(Pavel Stehule)
客户端应用程序 / psql
添加 psql 变量,以报告查询活动和错误(Fabien Coelho)
具体新增变量为 ERROR、SQLSTATE、ROW_COUNT、LAST_ERROR_MESSAGE 和 LAST_ERROR_SQLSTATE。
客户端应用程序 / psql
允许 psql 测试变量是否存在(Fabien Coelho)
具体而言,语法 :{?variable_name} 允许在 \if 语句中测试变量是否存在。
客户端应用程序 / psql
允许环境变量 PSQL_PAGER 控制 psql 的分页器(Pavel Stehule)
这允许用独立的环境变量指定 psql 的默认分页器,将其与其他应用的分页器设置分开。如果未设置 PSQL_PAGER,仍会遵循 PAGER。
客户端应用程序 / psql
使 psql 的 \d+ 命令始终显示表的分区信息(Amit Langote,Ashutosh Bapat)
以前,如果分区表没有分区,就不会显示其分区信息。现在还会指出哪些分区本身也是分区表。
客户端应用程序 / psql
确保 psql 在提示输入密码时显示正确的用户名(Tom Lane)
以前,同时使用 -U 和嵌入 URI 的用户名会导致显示错误的用户名。另外,在指定 --password 时,不再在密码提示前显示用户名。
客户端应用程序 / psql
在此前没有输入的情况下,允许 quit 和 exit 退出 psql(Bruce Momjian)
当输入缓冲区非空,而 quit 和 exit 单独出现在一行时,也会输出如何退出的提示。为 help 添加类似提示。
客户端应用程序 / psql
当 \q 单独输入在一行上却被忽略时,让 psql 提示使用 control-D(Bruce Momjian)
例如,在字符串内输入 \q 不会退出。
客户端应用程序 / psql
改进 ALTER INDEX RESET/SET 的 Tab 补全(Masahiko Sawada)
客户端应用程序 / psql
添加基础支持,使 psql 能够根据服务器版本调整 Tab 补全查询(Tom Lane)
以前,对旧版服务器执行 Tab 补全查询可能失败。
客户端应用程序 / pgbench
为 pgbench 表达式添加对 NULL、布尔值以及某些函数和操作符的支持(Fabien Coelho)
客户端应用程序 / pgbench
为 pgbench 添加 \if 条件支持(Fabien Coelho)
客户端应用程序 / pgbench
允许在 pgbench 变量名中使用非 ASCII 字符(Fabien Coelho)
客户端应用程序 / pgbench
添加 pgbench 选项 --init-steps,以控制执行哪些初始化步骤(Masahiko Sawada)
客户端应用程序 / pgbench
为 pgbench 添加近似服从 Zipf 分布的随机数生成器(Alik Khilazhev)
客户端应用程序 / pgbench
允许在 pgbench 中设置随机种子(Fabien Coelho)
客户端应用程序 / pgbench
允许 pgbench 使用 pow() 和 power() 执行幂运算(Raúl Marín Rodríguez)
客户端应用程序 / pgbench
为 pgbench 添加 hash 函数(Ildar Musin)
客户端应用程序 / pgbench
提高使用 --latency-limit 和 --rate 时 pgbench 统计信息的准确性(Fabien Coelho)
服务器应用程序
为pg_basebackup添加创建命名复制槽的选项(Michael Banck)
使用 WAL 流式方法(--wal-method=stream)时,--create-slot 选项会创建指定名称的复制槽(--slot)。
服务器应用程序
允许initdb为数据目录设置组读取权限(David Steele)
这通过新的 initdb 选项 --allow-group-access 完成。管理员也可以在运行 initdb 之前,为空数据目录设置组权限。服务器变量 data_directory_mode 允许读取数据目录的组权限。
服务器应用程序
添加pg_verify_checksums工具,以在离线状态下验证数据库校验和(Magnus Hagander)
服务器应用程序
允许pg_resetwal通过 --wal-segsize 更改 WAL 段大小(Nathan Bossart)
服务器应用程序
为 pg_resetwal 和 pg_controldata 添加长选项(Nathan Bossart,Peter Eisentraut)
服务器应用程序
为pg_receivewal添加 --no-sync 选项,用于测试时禁止同步 WAL 写入(Michael Paquier)
服务器应用程序
添加 pg_receivewal 选项 --endpos,以指定何时停止接收 WAL(Michael Paquier)
服务器应用程序
允许pg_ctl向进程发送 SIGKILL 信号(Andres Freund)
以前因担心可能被误用而不支持此功能。
服务器应用程序
减少pg_rewind复制的文件数量(Michael Paquier)
服务器应用程序
禁止以 root 身份运行 pg_rewind(Michael Paquier)
服务器应用程序 / pg_dump, pg_dumpall, pg_restore
添加 pg_dumpall 选项 --encoding,以控制输出编码(Michael Paquier)
pg_dump 已有此选项。
服务器应用程序 / 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 添加安装包含文件的支持(Andrew Gierth)
这支持创建依赖其他模块的扩展模块。以前,依赖模块没有简单的方法找到被引用模块的包含文件。若干定义了数据类型的现有 contrib 模块已作调整,以安装相关文件。此外,PL/Perl 和 PL/Python 现在也会安装其包含文件,以支持创建这些语言的转换模块。
源代码
安装 errcodes.txt,使扩展可以访问 PostgreSQL 已知的错误码列表(Thomas Munro)
源代码
将文档转换为 DocBook XML(Peter Eisentraut,Alexander Lakhin,Jürgen Purtz)
为与旧分支保持兼容,文件名仍使用 sgml 扩展名。
源代码
在适用的平台(即大多数平台)上,使用 stdbool.h 定义 bool 类型(Peter Eisentraut)
这消除了需要包含 stdbool.h 的扩展模块的一项编码隐患。
源代码
全面调整初始系统目录内容的定义方式(John Naylor)
初始数据现在用 Perl 数据结构表示,更便于机械化处理。
源代码
禁止扩展创建接受带引号值列表的自定义服务器参数(Tom Lane)
目前无法支持这种功能,因为在加载扩展之前就必须知道该参数的这一属性。
源代码
增加在使用SCRAM认证时使用通道绑定的能力(Michael Paquier)
通道绑定旨在防止中间人攻击,但除非能够强制启用通道绑定,否则 SCRAM 无法防止此类攻击。遗憾的是,libpq 中没有办法做到这一点。预计未来版本的 libpq,以及不基于 libpq 构建的接口(例如 JDBC)将支持此功能。
源代码
允许后台工作进程连接到通常不允许连接的数据库(Magnus Hagander)
源代码
添加对 ARMv8 上硬件 CRC 计算的支持(Yuqi Gu,Heikki Linnakangas,Thomas Munro)
源代码
加快按 OID 查找内置函数的速度(Andres Freund)
以前的二分查找已被查找数组取代。
源代码
加快查询结果的构建速度(Andres Freund)
源代码
提高系统缓存访问速度(Andres Freund)
源代码
添加针对顺序分配/释放优化的分代内存分配器(Tomas Vondra)
这减少了逻辑解码的内存用量。
源代码
使 VACUUM 对 pg_class.reltuples 的计算与 ANALYZE 一致(Tomas Vondra)
源代码
更新为使用 perltidy 20170521 版(Tom Lane,Peter Eisentraut)
附加模块
允许扩展 pg_prewarm 在启动时恢复先前的共享缓冲区内容(Mithun Cy,Robert Haas)
实现方式是让 pg_prewarm 在服务器运行期间不时地、并在关闭时,将共享缓冲区的关系和块号数据存储到磁盘。
附加模块
添加 pg_trgm 函数 strict_word_similarity(),以计算完整单词的相似度(Alexander Korotkov)
已有的 word_similarity() 函数也用于此目的,但它的设计是寻找单词中相似的部分,而 strict_word_similarity() 计算的是与完整单词的相似度。
附加模块
允许 btree_gin 对 bool、bpchar、name 和 uuid 数据类型建立索引(Matheus Oliveira)
附加模块
允许使用 ~> 操作符获取 cube 坐标的负值(Alexander Korotkov)
这对按降序查找坐标的 KNN-GiST 搜索很有用。
附加模块
为 unaccent 扩展添加越南语字母处理(Dang Minh Huong,Michael Paquier)
附加模块
增强 amcheck,以检查每个堆元组都有对应的索引条目(Peter Geoghegan)
附加模块
让 adminpack 使用新的默认文件系统访问角色(Stephen Frost)
以前,只有超级用户可以调用 adminpack 函数;现在改为检查角色权限。
“同一变更”有完整对应证据;“相关提交”可能包含多个独立事项、部分回补或后续调整,各版本说明分别保留。
附加模块
将 pg_stat_statement 的查询 ID 扩为 64 位(Robert Haas)
这大幅降低了查询 ID hash 冲突的概率。查询 ID 现在可能显示为负值。
附加模块
移除已不再推荐使用的 contrib/start-scripts/osx 脚本(改用 contrib/start-scripts/macos)(Tom Lane)
附加模块
移除 chkpass 扩展(Peter Eisentraut)
此扩展不再被视为可用的安全工具或编写扩展的示例。
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。