pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。
本次发布的全部变更
2012-09-10
9.2.0 历史版本维护截止 2017-11-09
对于希望从任何早期版本迁移数据的用户,需要使用 pg_dump 进行转储/恢复,或者使用 pg_upgrade。
版本 9.2 包含许多可能影响与以前版本兼容性的变更。请注意以下不兼容之处:
系统目录
从 pg_tablespace 中移除 spclocation 字段(Magnus Hagander)
该字段与实际定义表空间位置的符号链接重复,因此在移动表空间时存在遗漏错误的风险。此变更允许在服务器停机期间通过手工调整符号链接来移动表空间目录。为了替代该字段,我们新增了 pg_tablespace_location() 来查询符号链接。
系统目录
把 tsvector 的最常用元素统计移到 pg_stats 的新列中(Alexander Korotkov)
对于 tsvector 列,此前在 most_common_vals 和 most_common_freqs 中可用的数据,请改查 most_common_elems 和 most_common_elem_freqs。
函数
移除 hstore 的 => 操作符(Robert Haas)
用户现在应使用 hstore(text, text)。自 PostgreSQL 9.0 起,创建名为 => 的操作符时会发出警告消息,因为 SQL 标准将该记号保留作其他用途。
函数
确保 xpath() 对字符串值中的特殊字符转义(Florian Pflug)
否则结果有可能不是有效的 XML。
函数
让 pg_relation_size() 及相关函数在对象不存在时返回 NULL(Phil Sorber)
这防止了调用这些函数的查询在并发 DROP 之后立即返回错误。
函数
让 EXTRACT(EPOCH FROM 从本地午夜而不是 UTC 午夜起算纪元(Tom Lane)
timestamp without time zone)
此变更撤销了 7.3 版本中一个欠考虑的变更。从 UTC 午夜起算是不一致的,因为它使结果依赖于 timezone 设置,而 timestamp without time zone 的计算不应如此。把输入值转换为 timestamp with time zone 仍可获得先前的行为。
函数
正确解析带尾缀 yesterday、today 和 tomorrow 的时间串(Dean Rasheed)
此前,SELECT '04:00:00 yesterday'::timestamp 返回的是昨天午夜的日期。
函数
修复 to_date() 和 to_timestamp(),使不完整日期向 2020 年折算(Bruce Momjian)
此前,少于四位的提供年份和年份掩码的折算不一致。
对象修改
防止 ALTER DOMAIN 作用于非域类型(Peter Eisentraut)
此前在非域类型上可以更改所有者和模式。
对象修改
不再在 CREATE FUNCTION 中强制小写过程语言名(Robert Haas)
虽然不带引号的语言标识符仍会小写,但字符串和带引号的标识符不再被强制小写。因此例如 CREATE FUNCTION ... LANGUAGE 'C' 将不再有效;必须写成 'c',或者最好省略引号。
对象修改
更改外键强制触发器的系统生成名称(Tom Lane)
此变更确保在某些涉及自引用外键约束的极端情况下触发器按正确顺序触发。
命令行工具
为psql元命令参数提供一致的反引号、变量展开和带引号子串行为(Tom Lane)
此前,当这类引用与相邻文本之间没有空白分隔时,处理方式很奇怪。例如 'FOO'BAR 会输出为 FOO BAR(意外插入空格),而 FOO'BAR'BAZ 会原样输出(不像大多数人期望的那样去掉引号)。
命令行工具
createuser 默认不再提示输入选项设置(Peter Eisentraut)
使用 --interactive 获得旧行为。
命令行工具
除非指定 --interactive,否则禁用dropuser中的用户名提示(Peter Eisentraut)
服务器设置
新增用于指定服务器端 SSL 文件位置的服务器参数(Peter Eisentraut)
这允许更改此前在数据目录中硬编码为 server.crt、server.key、root.crt 和 root.crl 的文件的名称和位置。服务器默认不再检查 root.crt 或 root.crl;要加载这些文件,必须把相关参数设为非默认值。
服务器设置
移除 silent_mode 参数(Heikki Linnakangas)
类似的行为可以用 pg_ctl start -l postmaster.log 获得。
服务器设置
移除 wal_sender_delay 参数,因为它不再需要(Tom Lane)
服务器设置
移除 custom_variable_classes 参数(Tom Lane)
该设置提供的检查价值存疑。现在任何设置都可以以任何类名为前缀。
监控
把 pg_stat_activity.procpid 重命名为 pid,以与其他系统表一致(Magnus Hagander)
监控
为 pg_stat_activity 创建单独的列来报告进程状态(Scott Mead、Magnus Hagander)
先前的 query 和 query_start 值现在对空闲会话仍然可用,从而支持更强的分析。
监控
把 pg_stat_activity.current_query 重命名为 query,因为它在查询完成后不会被清除(Magnus Hagander)
监控
把所有 SQL 级统计计时值改为以毫秒计的 float8 列(Tom Lane)
此变更消除了设计中"值精确到微秒且仅到微秒"的假设(因为 float8 值可以带小数)。受影响的列有 pg_stat_user_functions.total_time、pg_stat_user_functions.self_time、pg_stat_xact_user_functions.total_time 和 pg_stat_xact_user_functions.self_time。这些列底层的统计函数现在也返回 float8 毫秒而不是 bigint 微秒。contrib/pg_stat_statements 的 total_time 列现在也以毫秒计。
服务器 / 性能
允许查询只从索引检索数据,避免堆访问(Robert Haas、Ibrar Ahmed、Heikki Linnakangas、Tom Lane)
此特性常称为仅索引扫描。对于只包含对所有会话可见的元组的堆页(由可见性映射报告),可以跳过堆访问;因此该收益主要适用于基本静态的数据。作为实现此特性的必要部分,可见性映射被做成了崩溃安全的。
服务器 / 性能
新增 SP-GiST(空间分区 GiST)索引访问方法(Teodor Sigaev、Oleg Bartunov、Tom Lane)
SP-GiST 在灵活性上与 GiST 相当,但支持非平衡的分区搜索结构而不是平衡树。对于合适的问题,SP-GiST 在索引构建时间和搜索时间上都可以比 GiST 更快。
服务器 / 性能
允许组提交在高负载下有效工作(Peter Geoghegan、Simon Riggs、Heikki Linnakangas)
此前,随着写负载增加,由于内部锁竞争,提交批处理变得无效。
服务器 / 性能
允许无竞争锁使用新的快速路径锁机制管理(Robert Haas)
服务器 / 性能
降低创建虚拟事务 ID 锁的开销(Robert Haas)
服务器 / 性能
降低可序列化隔离级别锁的开销(Dan Ports)
服务器 / 性能
改进 PowerPC 和 Itanium 上的自旋锁性能(Manabu Ori、Robert Haas、Tom Lane)
服务器 / 性能
降低共享失效缓存消息的开销(Robert Haas)
服务器 / 性能
把 PGPROC 共享内存数组中频繁访问的成员移到单独的数组中(Pavan Deolasee、Heikki Linnakangas、Robert Haas)
服务器 / 性能
通过批量向堆添加元组来改进 COPY 性能(Heikki Linnakangas)
服务器 / 性能
通过以更少的内存分配开销生成更好的树,改进几何数据类型的 GiST 索引性能(Alexander Korotkov)
服务器 / 性能
改进 GiST 索引构建时间(Alexander Korotkov、Heikki Linnakangas)
服务器 / 性能
允许临时表和不记录日志的表更早设置提示位(Robert Haas)
服务器 / 性能
允许排序由内联的、不可从 SQL 调用的比较函数执行(Peter Geoghegan、Robert Haas、Tom Lane)
服务器 / 性能
使 CLOG 缓冲区数量基于 shared_buffers 缩放(Robert Haas、Simon Riggs、Tom Lane)
服务器 / 性能
改进删除表或数据库时发生的缓冲池扫描的性能(Jeff Janes、Simon Riggs)
服务器 / 性能
改进删除或截断大量表时检查点进程 fsync 请求队列的性能(Tom Lane)
服务器 / 性能
在 Windows 上把安全的文件描述符数量传递给子进程(Heikki Linnakangas)
这允许 Windows 会话使用比以前更多的打开文件描述符。
服务器 / 进程管理
创建专门的后台进程来执行检查点(Simon Riggs)
此前后台写入进程既写脏页又做检查点。把这两项工作分到两个进程使每个目标都能更可预期地完成。
服务器 / 进程管理
通过更早唤醒 walwriter 来改进异步提交行为(Simon Riggs)
此前只有 wal_writer_delay 触发 WAL 刷盘;现在填满 WAL 缓冲区也会触发 WAL 写入。
服务器 / 进程管理
允许 bgwriter、walwriter、checkpointer、统计收集器、日志收集器和归档器等后台进程在空闲期间更高效地休眠(Peter Geoghegan、Tom Lane)
这一系列变更降低了无事可做时进程唤醒的频率,大幅降低了空闲服务器的功耗。
服务器 / 优化器
允许规划器即使在使用预备语句时,也为特定参数值生成定制计划(Tom Lane)
过去,预备语句总是只有一个用于所有参数值的“通用”计划,它常常远不如用于包含显式常量值的非预备语句的计划。现在,规划器会尝试为特定参数值生成定制计划。只有当定制计划反复被证明没有收益时,才会使用通用计划。此变更应能消除此前使用预备语句(包括 PL/pgSQL 中的非动态语句)所见的性能损失。
服务器 / 优化器
改进规划器使用内层索引扫描的嵌套循环的能力(Tom Lane)
新的“参数化路径”机制允许内层索引扫描使用来自比扫描高多个连接层级的关系的值。在语义限制(如外连接)限定允许连接顺序的情况下,这可以大幅提升性能。
服务器 / 优化器
改进外部数据包装器的规划 API(Etsuro Fujita、Shigeru Hanada、Tom Lane)
包装器现在可以为其表提供多个访问“路径”,使连接规划更加灵活。
服务器 / 优化器
识别非表关系的自相矛盾限定子句(Tom Lane)
只有当 constraint_exclusion 为 on 时才执行此检查。
服务器 / 优化器
允许 indexed_col op ANY(ARRAY[...]) 条件用于普通索引扫描和仅索引扫描(Tom Lane)
此前这类条件只能用于位图索引扫描。
服务器 / 优化器
支持在 boolean 列上使用 MIN/MAX 索引优化(Marti Raudsepp)
服务器 / 优化器
在设置行数估计时,把 SELECT 目标列表中的集合返回函数考虑在内(Tom Lane)
服务器 / 优化器
修复规划器,使其更可靠地处理含重复列的索引(Tom Lane)
服务器 / 优化器
收集并使用数组的元素频率统计(Alexander Korotkov、Tom Lane)
此变更改进了数组 <@、&& 和 @> 操作符(数组包含和重叠)的选择率估计。
服务器 / 优化器
允许为外部表收集统计信息(Etsuro Fujita)
服务器 / 优化器
改进使用部分索引的代价估计(Tom Lane)
服务器 / 优化器
改进规划器对子查询中引用列使用统计信息的能力(Tom Lane)
服务器 / 优化器
改进对使用 DISTINCT 的子查询的统计估计(Tom Lane)
服务器 / 认证
不再把 pg_hba.conf 中指定的角色名和 samerole 视为自动包含超级用户(Andrew Dunstan)
这使得把 reject 行用于组角色更加容易。
服务器 / 认证
调整 pg_hba.conf 处理,使记号解析更一致(Brendan Jurd、Álvaro Herrera)
服务器 / 认证
不允许空的 pg_hba.conf 文件(Tom Lane)
这样做是为了更快地检测配置错误。
服务器 / 认证
让超级用户权限隐含复制权限(Noah Misch)
这避免了显式分配此类权限的需要。
服务器 / 监控
在后端崩溃时尝试记录当前查询串(Marti Raudsepp)
服务器 / 监控
让自动清理 I/O 活动的日志更详细(Greg Smith、Noah Misch)
此日志由 log_autovacuum_min_duration 触发。
服务器 / 监控
让 WAL 重放更早报告失败(Fujii Masao)
有些情况下,失败直到服务器进入主库模式才被报告。
服务器 / 监控
新增 pg_xlog_location_diff(),简化 WAL 位置比较(Euler Taveira de Oliveira)
这对于计算复制延迟很有用。
服务器 / 监控
支持在 Windows 上配置事件日志应用名(MauMau、Magnus Hagander)
这允许不同实例通过设置 event_source 服务器参数以不同标识符使用事件日志,其工作方式类似于 syslog_ident。
服务器 / 监控
把“unexpected EOF”消息改为 DEBUG1 级别,存在未结束事务的情况除外(Magnus Hagander)
此变更减少了以不优雅方式关闭数据库连接的应用所造成的日志噪音。
服务器 / 统计视图
在 pg_stat_database 系统视图中跟踪临时文件大小和文件数量(Tomas Vondra)
服务器 / 统计视图
为 pg_stat_database 系统视图新增死锁计数器(Magnus Hagander)
服务器 / 统计视图
新增服务器参数 track_io_timing,用于跟踪 I/O 计时(Ants Aasma、Robert Haas)
服务器 / 统计视图
在 pg_stat_bgwriter 中报告检查点计时信息(Greg Smith、Peter Geoghegan)
服务器 / 服务器设置
静默忽略 search_path 中指定但不存在的模式(Tom Lane)
这使得使用通用路径设置更方便,这类设置可能包含并非在所有数据库中都存在的模式。
服务器 / 服务器设置
允许超级用户按会话设置 deadlock_timeout,而不仅是按集簇(Noah Misch)
这允许对很可能卷入死锁的事务降低 deadlock_timeout,从而更快检测到失败。或者,提高该值可以降低会话因死锁而被选中取消的机会。
服务器 / 服务器设置
新增服务器参数 temp_file_limit,用于限制每会话的临时文件空间使用(Mark Kirkwood)
服务器 / 服务器设置
允许超级用户在加载相关扩展之前 SET 该扩展的仅超级用户自定义变量(Tom Lane)
系统现在会记住 SET 是否由超级用户执行,以便在加载扩展时进行正确的权限检查。
服务器 / 服务器设置
为 postmaster 新增 -C 选项,用于查询配置参数(Bruce Momjian)
这使 pg_ctl 能更好地处理 PGDATA 或 -D 指向仅配置目录的情况。
服务器 / 服务器设置
在 CREATE DATABASE 中用隐含值替换空的区域名(Tom Lane)
这防止了 pg_database.datcollate 或 datctype 在服务器重启后被不同解释的情况。
服务器 / 服务器设置 / postgresql.conf
允许报告 postgresql.conf 中的多个错误,而不是只有第一个(Alexey Klyukin、Tom Lane)
服务器 / 服务器设置 / postgresql.conf
允许所有会话处理 postgresql.conf 的重新加载,即使某些设置对特定会话无效(Alexey Klyukin)
此前,这类会话内无效的值会导致该会话忽略所有设置变更。
服务器 / 服务器设置 / postgresql.conf
为配置文件新增 include_if_exists 机制(Greg Smith)
其工作方式与 include 相同,只是文件缺失时不抛出错误。
服务器 / 服务器设置 / postgresql.conf
在 initdb 期间确定服务器时区,并相应地设置 postgresql.conf 中的 timezone 和 log_timezone 条目(Tom Lane)
这避免了服务器启动期间昂贵的时区探测。
服务器 / 服务器设置 / postgresql.conf
修复 pg_settings,使其在 Windows 上报告 postgresql.conf 行号(Tom Lane)
复制和恢复
允许流复制从库向其他从库转发数据(级联复制)(Fujii Masao)
此前,只有主服务器能向备库服务器提供流复制日志文件。
复制和恢复
为 synchronous_commit 新增模式 remote_write(Fujii Masao、Simon Riggs)
此模式等待备库服务器把事务数据写入其自身的操作系统,但不等待数据被刷到备库的磁盘。
复制和恢复
新增pg_receivexlog工具,在 WAL 文件变更写入时就归档,而不是等待 WAL 文件完成(Magnus Hagander)
复制和恢复
允许pg_basebackup从备库服务器做基础备份(Jun Ishizuka、Fujii Masao)
此特性允许把制作新基础备份的工作从主库服务器上卸载。
复制和恢复
允许在 pg_basebackup 执行备份期间流式传输 WAL 文件(Magnus Hagander)
这允许在 WAL 文件在主库上被丢弃之前传给备库。
查询
当客户端断开连接时取消正在运行的查询(Florian Pflug)
如果后端在查询期间检测到客户端连接丢失,现在会取消该查询,而不是试图完成它。
查询
在运行时为行表达式保留列名(Andrew Dunstan、Tom Lane)
此变更允许在行值转换为 hstore 或 json 类型时获得更好的结果:结果值的字段现在会具有预期的名称。
查询
改进子 SELECT 结果所用的列标签(Marti Raudsepp)
此前使用的是通用标签 ?column?。
查询
改进确定未知值类型的启发式规则(Tom Lane)
"未知常量可以与使用它的操作符另一侧的值具有相同类型"这一长期规则,现在在考虑多态操作符时也会应用,而不仅用于简单的操作符匹配。
查询
对创建到域类型或从域类型出发的转换发出警告(Robert Haas)
这类转换没有任何效果。
查询
当行违反 CHECK 或 NOT NULL 约束时,把行的内容显示为错误细节(Jan Kundrát)
当插入或更新正在处理许多行时,这应能更容易识别哪一行有问题。
对象操作
提供并发 DDL 期间更可靠的操作(Robert Haas、Noah Misch)
此变更增加了锁定,应能消除许多场景下的“cache lookup failed”错误。此外,也不再可能向正被并发删除的模式添加关系——这种场景以前会导致系统目录内容不一致。
对象操作
为 DROP INDEX 新增 CONCURRENTLY 选项(Simon Riggs)
这允许在不阻塞其他会话的情况下移除索引。
对象操作
允许外部数据包装器具有逐列选项(Shigeru Hanada)
对象操作
改进视图定义的漂亮打印(Andrew Dunstan)
对象操作 / 约束
允许 CHECK 约束声明为 NOT VALID(Álvaro Herrera)
添加 NOT VALID 约束不会导致扫描表以验证现有行满足约束。之后,新添加或更新的行会被检查。规划器在考虑 constraint_exclusion 时会忽略这类约束,因为不能确定所有行都满足约束。
新的 ALTER TABLE VALIDATE 命令允许对现有行检查 NOT VALID 约束,之后它们被转换为普通约束。
对象操作 / 约束
允许 CHECK 约束声明为 NO INHERIT(Nikhil Sontakke、Alex Hunsaker、Álvaro Herrera)
这使它们只在父表上强制执行,而不在子表上。
对象操作 / 约束
新增重命名约束的能力(Peter Eisentraut)
对象操作 / ALTER
减少某些 ALTER TABLE ... ALTER COLUMN TYPE 操作重建表和索引的需要(Noah Misch)
增大 varchar 或 varbit 列的长度限制,或者完全移除限制,不再需要重写表。类似地,增大 numeric 列允许的精度,或者把列从受约束的 numeric 改为不受约束的 numeric,也不再需要重写表。在涉及 interval、timestamp 和 timestamptz 类型的类似情况下,也可以避免重写表。
对象操作 / ALTER
避免 ALTER TABLE 在某些不必要的情况下重新验证外键约束(Noah Misch)
对象操作 / ALTER
为一些 ALTER 命令新增 IF EXISTS 选项(Pavel Stehule)
例如 ALTER FOREIGN TABLE IF EXISTS foo RENAME TO bar。
对象操作 / ALTER
新增 ALTER FOREIGN DATA WRAPPER ... RENAME 和 ALTER SERVER ... RENAME(Peter Eisentraut)
对象操作 / ALTER
新增 ALTER DOMAIN ... RENAME(Peter Eisentraut)
此前已可以用 ALTER TYPE 重命名域。
对象操作 / ALTER
让 ALTER DOMAIN ... DROP CONSTRAINT 在约束不存在时抛出错误(Peter Eisentraut)
已新增 IF EXISTS 选项来提供先前的行为。
对象操作 / CREATE TABLE
允许从外部表、视图和组合类型执行 CREATE TABLE (LIKE ...)(Peter Eisentraut)
例如,这允许创建一个模式与某个视图匹配的表。
对象操作 / CREATE TABLE
修复 CREATE TABLE (LIKE ...),避免复制索引注释时的索引名冲突(Tom Lane)
对象操作 / CREATE TABLE
修复 CREATE TABLE ... AS EXECUTE,使其处理 WITH NO DATA 和列名指定(Tom Lane)
对象操作 / 对象权限
为视图新增 security_barrier 选项(KaiGai Kohei、Robert Haas)
此选项防止可能向用户暴露视图保护数据的优化,例如把涉及不安全函数的子句下推到视图的 WHERE 子句。这类视图的性能预计会比普通视图差。
对象操作 / 对象权限
新增 LEAKPROOF 函数属性,用于标记可以安全下推到 security_barrier 视图的函数(KaiGai Kohei)
对象操作 / 对象权限
新增对数据类型权限的支持(Peter Eisentraut)
这新增了对类型和域上符合 SQL 标准的 USAGE 权限的支持。其意图是能够限制哪些用户可以在类型上创建依赖,因为这类依赖会限制所有者更改类型的能力。
对象操作 / 对象权限
在 SELECT INTO / CREATE TABLE AS 中检查 INSERT 权限(KaiGai Kohei)
由于对象是由 SELECT INTO 或 CREATE TABLE AS 创建的,创建者通常应拥有插入权限;但存在一些例外情况,例如 ALTER DEFAULT PRIVILEGES 移除了这类权限时。
工具操作
允许 VACUUM 更容易地跳过无法锁定的页面(Simon Riggs、Robert Haas)
此变更应能大幅减少 VACUUM 因等待其他会话而“卡住”的情况。
工具操作
让 EXPLAIN (BUFFERS) 统计被弄脏和写出的块(Robert Haas)
工具操作
让 EXPLAIN ANALYZE 报告被过滤步骤拒绝的行数(Marko Tiikkaja)
工具操作
允许 EXPLAIN ANALYZE 在不需要时间值时避免计时开销(Tomas Vondra)
这通过把新的 TIMING 选项设为 FALSE 实现。
数据类型
新增对范围数据类型的支持(Jeff Davis、Tom Lane、Alexander Korotkov)
范围数据类型存储属于其基础类型的下界和上界。它支持包含、重叠和交集等操作。
数据类型
新增 JSON 数据类型(Robert Haas)
该类型存储经过正确验证的 JSON(JavaScript 对象表示法)数据。
数据类型
新增 array_to_json() 和 row_to_json()(Andrew Dunstan)
数据类型
新增 SMALLSERIAL 数据类型(Mike Pultz)
它类似于 SERIAL,只是把序列存储在两字节整数列(int2)中。
数据类型
允许域声明为 NOT VALID(Álvaro Herrera)
此选项可以在创建域时设置,或者通过 ALTER DOMAIN ... ADD CONSTRAINT ... NOT VALID 设置。ALTER DOMAIN ... VALIDATE CONSTRAINT 会完全验证约束。
数据类型
为 money 数据类型支持更多区域特定的格式化选项(Tom Lane)
具体而言,遵循 POSIX 中关于货币输出中值、符号和货币符号顺序的所有选项。此外,确保千位分隔符只插入在小数点左侧,这是 POSIX 的要求。
数据类型
为 macaddr 数据类型新增按位“与”、“或”和“非”操作符(Brendan Jurd)
数据类型
允许 xpath() 在给定标量值时返回单元素 XML 数组(Florian Pflug)
此前它返回空数组。此变更还会使 xpath_exists() 对这类表达式返回真而不是假。
数据类型
改进 XML 错误处理的健壮性(Florian Pflug)
函数
允许非超级用户对属于同一用户的其他会话使用 pg_cancel_backend() 和 pg_terminate_backend()(Magnus Hagander、Josh Kupershmidt、Dan Farina)
此前只有超级用户可以使用这些函数。
函数
允许导入和导出事务快照(Joachim Wieland、Tom Lane)
这允许多个事务共享相同的数据库状态视图。快照通过 pg_export_snapshot() 导出,并通过 SET TRANSACTION SNAPSHOT 导入。只能导入来自当前正在运行的事务的快照。
函数
支持对表达式使用 COLLATION FOR(Peter Eisentraut)
它返回一个表示该表达式排序规则的字符串。
函数
新增 pg_opfamily_is_visible()(Josh Kupershmidt)
函数
新增 pg_size_pretty() 的 numeric 变体,供 pg_xlog_location_diff() 使用(Fujii Masao)
函数
新增 pg_trigger_depth() 函数(Kevin Grittner)
它报告当前触发器调用深度。
函数
允许 string_agg() 处理 bytea 值(Pavel Stehule)
函数
修复反向引用出现在更大的带量词子表达式中的正则表达式(Tom Lane)
例如 ^(\w+)( \1)+$。以前的版本不检查反向引用是否真的与第一次出现匹配。
Information Schema
新增信息模式视图 role_udt_grants、udt_privileges 和 user_defined_types(Peter Eisentraut)
Information Schema
为信息模式 element_types 视图新增组合类型属性(Peter Eisentraut)
Information Schema
在信息模式中实现 interval_type 列(Peter Eisentraut)
此前这些列读取为空值。
Information Schema
在信息模式 attributes、columns、domains 和 element_types 视图中实现排序规则相关列(Peter Eisentraut)
Information Schema
在信息模式 table_privileges 视图中实现 with_hierarchy 列(Peter Eisentraut)
Information Schema
在信息模式中新增序列 USAGE 权限的显示(Peter Eisentraut)
Information Schema
让信息模式显示默认权限(Peter Eisentraut)
此前,非空的默认权限没有在视图中表示。
服务器端语言 / PL/pgSQL Server-Side Language
允许 PL/pgSQL 的 OPEN 游标命令按名称提供参数(Yeb Havinga)
服务器端语言 / PL/pgSQL Server-Side Language
新增 PL/pgSQL 命令 GET STACKED DIAGNOSTICS,用于获取异常信息(Pavel Stehule)
服务器端语言 / PL/pgSQL Server-Side Language
通过缓存类型信息加速 PL/pgSQL 数组赋值(Pavel Stehule)
服务器端语言 / PL/pgSQL Server-Side Language
改进长链 ELSIF 子句的性能和内存消耗(Tom Lane)
服务器端语言 / PL/pgSQL Server-Side Language
让 PL/pgSQL 错误消息输出函数签名而不仅是名称(Pavel Stehule)
服务器端语言 / PL/Python Server-Side Language
新增 PL/Python 的 SPI 游标支持(Jan Urbanski)
这允许 PL/Python 读取部分结果集。
服务器端语言 / PL/Python Server-Side Language
为 PL/Python 新增结果元数据函数(Peter Eisentraut)
具体而言,这新增了结果对象函数 .colnames、.coltypes 和 .coltypmods。
服务器端语言 / PL/Python Server-Side Language
移除对 Python 2.2 的支持(Peter Eisentraut)
服务器端语言 / SQL Server-Side Language
允许 SQL 语言函数按名称引用参数(Matthew Draper)
要使用此特性,只需为函数参数命名,然后在 SQL 函数体中引用参数名。
客户端应用程序
为initdb新增选项 --auth-local 和 --auth-host(Peter Eisentraut)
这允许分别控制 pg_hba.conf 中 local 和 host 的认证设置。--auth 仍然同时控制两者。
客户端应用程序
为createuser新增 --replication/--no-replication 标志,用于控制复制权限(Fujii Masao)
客户端应用程序
使命令行工具能够指定要连接的数据库名,并在连接 postgres 数据库失败时回退到 template1(Robert Haas)
客户端应用程序 / psql
新增根据显示宽度自动扩展输出的显示模式(Peter Eisentraut)
这为 \x 命令新增了 auto 选项,当普通输出会比屏幕更宽时切换到扩展模式。
客户端应用程序 / psql
允许包含相对于调用文件所在目录命名的脚本文件(Gurjeet Singh)
这通过新命令 \ir 实现。
客户端应用程序 / psql
支持 psql 变量名中的非 ASCII 字符(Tom Lane)
客户端应用程序 / psql
新增对特定大版本的 .psqlrc 文件的支持(Bruce Momjian)
psql 此前已支持特定小版本的 .psqlrc 文件。
客户端应用程序 / psql
提供用环境变量覆盖 psql 历史和启动文件位置的能力(Andrew Dunstan)
如果设置了 PSQL_HISTORY 和 PSQLRC,现在将由它们决定这些文件名。
客户端应用程序 / psql
新增 \setenv 命令,用于修改传递给子进程的环境变量(Andrew Dunstan)
客户端应用程序 / psql
让 psql 的临时编辑器文件使用 .sql 扩展名(Peter Eisentraut)
这允许对扩展名敏感的编辑器选择正确的模式。
客户端应用程序 / psql
允许 psql 使用零字节字段和记录分隔符(Peter Eisentraut)
各种 shell 工具使用零字节(NUL)分隔符,例如 find。
客户端应用程序 / psql
让 \timing 选项报告失败查询的耗时(Magnus Hagander)
此前只对成功查询报告耗时。
客户端应用程序 / psql
统一并收紧 psql 对 \copy 和 SQL COPY 的处理(Noah Misch)
此修复使失败行为更可预期,并遵循 \set ON_ERROR_ROLLBACK。
客户端应用程序 / 信息命令
让 \d 在序列上显示拥有它的表/列名(Magnus Hagander)
客户端应用程序 / 信息命令
在 \d+ 中显示列的统计目标(Magnus Hagander)
客户端应用程序 / 信息命令
在 \du 中显示角色口令过期日期(Fabrízio de Royes Mello)
客户端应用程序 / 信息命令
显示转换、编码转换、域和语言的注释(Josh Kupershmidt)
它们分别包含在 \dC+、\dc+、\dD+ 和 \dL 的输出中。
客户端应用程序 / 信息命令
显示 SQL/MED 对象的注释(Josh Kupershmidt)
它们分别包含在外部服务器、外部表和外部数据包装器的 \des+、\det+ 和 \dew+ 输出中。
客户端应用程序 / 信息命令
更改 \dd,使其只显示没有专属反斜杠命令的对象类型的注释(Josh Kupershmidt)
客户端应用程序 / Tab 补全
在 psql Tab 补全中,按照新的 COMP_KEYWORD_CASE 设置以大写或小写补全 SQL 关键字(Peter Eisentraut)
客户端应用程序 / Tab 补全
新增 EXECUTE 的 Tab 补全支持(Andreas Karlsson)
客户端应用程序 / Tab 补全
允许 GRANT/REVOKE 中角色引用的 Tab 补全(Peter Eisentraut)
客户端应用程序 / Tab 补全
允许文件名的 Tab 补全在必要时提供引号(Noah Misch)
客户端应用程序 / Tab 补全
更改 TABLE 的 Tab 补全支持,使其也包含视图(Magnus Hagander)
客户端应用程序 / pg_dump
为 pg_dump 新增 --exclude-table-data 选项(Andrew Dunstan)
这允许按表只转储表的定义而不转储其数据。
客户端应用程序 / pg_dump
为 pg_dump 和 pg_restore 新增 --section 选项(Andrew Dunstan)
有效值为 pre-data、data 和 post-data。该选项可以给出多次以选择两个或更多节。
客户端应用程序 / pg_dump
让pg_dumpall先转储所有角色,再转储角色上的所有配置设置(Phil Sorber)
这允许角色的配置设置提及其他角色而不产生错误。
客户端应用程序 / pg_dump
允许 pg_dumpall 在新集簇缺少 postgres 数据库时避免错误(Robert Haas)
客户端应用程序 / pg_dump
按用户名顺序转储外部服务器用户映射(Peter Eisentraut)
这有助于产生确定性的转储文件。
客户端应用程序 / pg_dump
以可预测的顺序转储操作符(Peter Eisentraut)
客户端应用程序 / pg_dump
收紧 pg_dump 转储扩展配置表的规则(Tom Lane)
客户端应用程序 / pg_dump
让 pg_dump 生成更有用的依赖信息(Tom Lane)
归档格式转储中包含的依赖链接此前用处非常有限,因为它们经常引用转储中根本没有出现的对象。现在它们表示被转储对象之间的实际依赖(可能是间接的)。
客户端应用程序 / pg_dump
改进 pg_dump 转储大量数据库对象时的性能(Tom Lane)
libpq
允许 libpq 连接串采用 URI 格式(Alexander Shulgin)
语法以 postgres:// 开头。这允许应用避免为表示数据库连接的 URI 实现自己的解析器。
libpq
新增用于禁用 SSL 压缩的连接选项(Laurenz Albe)
这可用于消除快速网络上 SSL 压缩的开销。
libpq
新增单行处理模式,以更好地处理大型结果集(Kyotaro Horiguchi、Marko Kreen)
此前,libpq 总是先把整个查询结果收集到内存中,再传递回应用。
libpq
为函数 PQconnectdbParams、PQconnectStartParams 和 PQpingParams 的声明添加 const 限定符(Lionel Elie Mamane)
libpq
允许 .pgpass 文件的口令字段包含转义字符(Robert Haas)
libpq
让库函数在需要终止进程时使用 abort() 而不是 exit()(Peter Eisentraut)
这一选择不会干扰程序使用的正常退出码,并会生成可被调用方捕获的信号。
源代码
移除已死的平台(Peter Eisentraut)
以下平台不再受支持:dgux、nextstep、sunos4、svr4、ultrix4、univel、bsdi。
源代码
新增对使用 MS Visual Studio 2010 构建的支持(Brar Piening)
源代码
支持使用 MinGW-w64 32 位编译器编译(Lars Kanis)
源代码
安装时把 plpgsql.h 安装到 include/server(Heikki Linnakangas)
源代码
改进闩锁机制,加入对 postmaster 死亡的检测(Peter Geoghegan、Heikki Linnakangas、Tom Lane)
这消除了后台进程此前必须唤醒以轮询事件的主要原因之一。
源代码
在支持的地方使用 C 弹性数组成员(Peter Eisentraut)
源代码
改进并发事务回归测试(isolationtester)(Noah Misch)
源代码
修改 thread_test,使其在当前目录而不是 /tmp 中创建测试文件(Bruce Momjian)
源代码
改进 flex 和 bison 的警告与错误报告(Tom Lane)
源代码
新增内存屏障支持(Robert Haas)
目前尚未使用。
源代码
修改 pgindent 以使用 typedef 文件(Bruce Momjian)
源代码
新增用于处理即将发送到服务器日志的消息的钩子(Martin Pihlak)
源代码
为 DROP 命令新增对象访问钩子(KaiGai Kohei)
源代码
集中化某些对象类型的 DROP 处理(KaiGai Kohei)
源代码
新增 pg_upgrade 测试套件(Peter Eisentraut)
源代码
把正则表达式代码与 TCL 8.5.11 同步,并改进内部处理(Tom Lane)
源代码
把 CRC 表移到 libpgport,并在单独的头文件中提供(Daniel Farina)
源代码
为 git_changelog 新增用于制作大版本发行说明的选项(Bruce Momjian)
源代码
支持 Linux 的 /proc/self/oom_score_adj API(Tom Lane)
附加模块
通过使用 libpq 新的单行处理模式改进 dblink 的效率(Kyotaro Horiguchi、Marko Kreen)
此改进不适用于 dblink_send_query()/dblink_get_result()。
附加模块
在 file_fdw 中支持 force_not_null 选项(Shigeru Hanada)
附加模块
为pg_archivecleanup实现空运行模式(Gabriele Bartolini)
它只输出要删除文件的名称。
附加模块
为 pgbench 新增开关 --unlogged-tables、--tablespace 和 --index-tablespace(Robert Haas)
附加模块
更改pg_test_fsync,使其按固定时长而不是固定周期数测试(Bruce Momjian)
移除了 -o/cycles 选项,新增了 -s/seconds。
附加模块
新增pg_test_timing工具,用于测量时钟单调性和计时开销(Ants Aasma、Greg Smith)
附加模块
新增 tcn(触发式变更通知)模块,在表变更时生成 NOTIFY 事件(Kevin Grittner)
附加模块 / pg_upgrade
调整 pg_upgrade 环境变量(Bruce Momjian)
把数据、bin 和端口环境变量重命名为以 PG 开头,并支持 PGPORTOLD/PGPORTNEW 以取代 PGPORT。
附加模块 / pg_upgrade
彻底改造 pg_upgrade 的日志和失败报告(Bruce Momjian)
创建四个只追加的日志文件,成功时删除它们。新增 -r/--retain 选项以无条件保留这些文件。同时移除 pg_upgrade 的 -g/-G/-l 选项(已无必要),并收紧日志文件权限。
附加模块 / pg_upgrade
让 pg_upgrade 创建一个脚本,以增量方式生成更准确的优化器统计信息(Bruce Momjian)
这减少了升级后生成最小集簇统计信息所需的时间。
附加模块 / pg_upgrade
允许 pg_upgrade 升级没有 postgres 数据库的旧集簇(Bruce Momjian)
附加模块 / pg_upgrade
允许 pg_upgrade 处理某些旧库或新库缺失的情况,只要它们是空的(Bruce Momjian)
附加模块 / pg_upgrade
允许 pg_upgrade 处理仅配置目录的安装(Bruce Momjian)
附加模块 / pg_upgrade
在 pg_upgrade 中新增 -o/-O 选项,用于向服务器传递参数(Bruce Momjian)
这对仅配置目录的安装很有用。
附加模块 / pg_upgrade
更改 pg_upgrade,使其默认使用端口 50432(Bruce Momjian)
这有助于避免升级期间意外的客户端连接。
附加模块 / pg_upgrade
减少 pg_upgrade 中的集簇锁定(Bruce Momjian)
具体而言,只有使用链接模式时才锁定旧集簇,并在模式恢复之后立即进行。
附加模块 / pg_stat_statements
允许 pg_stat_statements 通过 SQL 文本归一化聚合相似查询(Peter Geoghegan、Tom Lane)
使用非参数化 SQL 应用的用户现在无需详细的日志分析就能监控查询性能。
附加模块 / pg_stat_statements
为 pg_stat_statements 新增脏块和写出块计数以及读写时间(Robert Haas、Ants Aasma)
附加模块 / pg_stat_statements
防止 pg_stat_statements 重复计数 PREPARE 和 EXECUTE 命令(Tom Lane)
附加模块 / sepgsql
支持在全局对象上使用 SECURITY LABEL(KaiGai Kohei、Robert Haas)
具体而言,为数据库、表空间和角色添加安全标签。
附加模块 / sepgsql
允许 sepgsql 遵循数据库标签(KaiGai Kohei)
附加模块 / sepgsql
在各种对象创建期间执行 sepgsql 权限检查(KaiGai Kohei)
附加模块 / sepgsql
新增 sepgsql_setcon() 及相关函数,用于控制 sepgsql 安全域(KaiGai Kohei)
附加模块 / sepgsql
为 sepgsql 新增用户空间访问缓存以提升性能(KaiGai Kohei)
文档
新增规则,可选择使用网站样式表构建 HTML 文档(Magnus Hagander)
使用 gmake STYLE=website draft。
文档
改进 EXPLAIN 文档(Tom Lane)
文档
记录命令行工具(如 vacuumdb)通过双引号保留用户/数据库名(Bruce Momjian)
文档
记录客户端为 MD5 认证返回的实际字符串(Cyan Ogilvie)
文档
废弃在 CREATE TEMP TABLE 中使用 GLOBAL 和 LOCAL(Noah Misch)
PostgreSQL 长期以来把这些关键字视为无操作,并将继续如此;但未来它们可能获得 SQL 标准所规定的含义,因此应用应避免使用它们。
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。