pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
文档版本对比
POSTGRESQL · VERSION COMPARE
本次发布的完整功能、修复与兼容性说明,以及它们在其他版本中的关联记录。
从起始版本之后,看到目标版本为止。大版本名称代表该系列首个正式版本。
收录 PostgreSQL 9.0 起的 17 个大版本、352 份发布说明;数据更新于 2026-09-26。
本次发布的全部变更
2011-09-12
9.1.0 历史版本维护截止 2016-10-27
对于希望从任何早期版本迁移数据的用户,需要使用 pg_dump 进行转储/恢复,或者使用 pg_upgrade。
版本 9.1 包含许多可能影响与以前版本兼容性的变更。请注意以下不兼容之处:
字符串
把 standard_conforming_strings 的默认值改为 on(Robert Haas)
默认情况下,反斜杠现在是字符串字面量中的普通字符,而不是转义字符。此变更消除了一个与 SQL 标准长期存在的不兼容。escape_string_warning 多年来一直对这种用法发出警告。E'' 字符串是在字符串中嵌入反斜杠转义的正确方式,不受此变更影响。
此变更可能破坏未预料到它并按旧规则自行做字符串转义的应用。后果可能严重到引入 SQL 注入安全漏洞。务必测试暴露于不可信输入的应用,确保它们正确处理文本字符串中的单引号和反斜杠。
类型转换
禁止对组合类型使用函数式和属性式数据类型转换(Tom Lane)
例如,禁止 和 composite_value.texttext(。无意中使用这种语法常常导致缺陷报告;虽然这不是缺陷,但回到拒绝这类表达式似乎更好。当确实想要转换整个组合值时,composite_value)CAST 和 :: 语法仍然可用。
类型转换
收紧对基于数组的域的转换检查(Tom Lane)
当域基于数组类型时,允许“透过”域类型访问数组元素,包括对域值做下标操作来获取或赋值元素。对这种域值的元素赋值(例如通过 UPDATE ... SET domaincol[5] = ...)现在会重新检查域类型的约束,而此前会跳过检查。
数组
更改 string_to_array(),使其对零长度字符串返回空数组(Pavel Stehule)
此前这返回空值。
数组
更改 string_to_array(),使 NULL 分隔符把字符串拆分为字符(Pavel Stehule)
此前这返回空值。
对象修改
修复对 BEFORE/AFTER 触发器的不当检查(Tom Lane)
触发器现在可以在三种情况下触发:某动作的 BEFORE、AFTER 或 INSTEAD OF。触发器函数作者应验证其逻辑在三种情况下都表现正常。
对象修改
要求超级用户或 CREATEROLE 权限才能为角色设置注释(Tom Lane)
服务器设置
更改 pg_last_xlog_receive_location(),使其永不倒退(Fujii Masao)
此前,当流复制重启时,pg_last_xlog_receive_location() 的值可能倒退。
服务器设置
让复制连接的日志记录遵循 log_connections(Magnus Hagander)
此前复制连接总是被记录。
PL/pgSQL Server-Side Language
更改 PL/pgSQL 的无参数 RAISE 命令,使其可被所附加的异常块捕获(Piyush Newe)
此前代码块中的 RAISE 总是作用于所附加的异常块,因此在同一作用域内无法捕获。
PL/pgSQL Server-Side Language
调整 PL/pgSQL 的错误行号代码,使其与其他过程语言一致(Pavel Stehule)
此前 PL/pgSQL 会忽略(不计数)函数体开头的空行。由于这与其他所有语言不一致,该特殊情况已被移除。
PL/pgSQL Server-Side Language
让 PL/pgSQL 对 IN 和 OUT 参数名冲突报错(Tom Lane)
此前不会检测冲突,该名称会静默地只指向 OUT 参数。
PL/pgSQL Server-Side Language
PL/pgSQL 变量的类型修饰符现在对 SQL 解析器可见(Tom Lane)
附加到 PL/pgSQL 变量的类型修饰符(如 varchar 长度限制)此前只在赋值期间强制执行,其他用途一律忽略。这类变量现在的行为将更像是用相同修饰符声明的表列。预计在大多数情况下这不会造成可见差异,但可能给 PL/pgSQL 函数发出的某些 SQL 命令带来细微变化。
附加模块
所有 contrib 模块现在都通过 CREATE EXTENSION 安装,而不是手工调用其 SQL 脚本(Dimitri Fontaine、Tom Lane)
要更新包含某 contrib 模块 9.0 版本的现有数据库,使用 CREATE EXTENSION ... FROM unpackaged 把现有 contrib 模块的对象包装成扩展。从 9.0 之前的版本更新时,先用旧的卸载脚本删除该 contrib 模块的对象,然后使用 CREATE EXTENSION。
其他不兼容之处
让 pg_stat_reset() 重置所有数据库级统计信息(Tomas Vondra)
一些 pg_stat_database 计数器此前没有被重置。
其他不兼容之处
修正一些 information_schema.triggers 列名,使其与新的 SQL 标准名称一致(Dean Rasheed)
其他不兼容之处
把 ECPG 游标名视为大小写不敏感(Zoltan Boszormenyi)
服务器 / 性能
支持在 CREATE TABLE 中使用 UNLOGGED 选项的不记录日志的表(Robert Haas)
这类表比常规表提供更好的更新性能,但不是崩溃安全的:服务器崩溃时其内容会被自动清除。其内容也不会传播到复制从库。
服务器 / 性能
允许把 FULL OUTER JOIN 实现为哈希连接,并允许对 LEFT OUTER JOIN 或 RIGHT OUTER JOIN 的任一侧做哈希(Tom Lane)
此前 FULL OUTER JOIN 只能实现为合并连接,而 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 只能对连接的可空侧做哈希。这些变更提供了额外的查询优化可能性。
服务器 / 性能
合并重复的 fsync 请求(Robert Haas、Greg Smith)
这大幅改进了重写负载下的性能。
服务器 / 性能
改进 commit_siblings 的性能(Greg Smith)
这使 commit_siblings 的使用开销更低。
服务器 / 性能
降低大型 ispell 词典的内存需求(Pavel Stehule、Tom Lane)
服务器 / 性能
避免“盲写”之后数据文件保持打开(Alvaro Herrera)
这修复了后端可能在文件被删除后很久仍持有其打开状态、阻止内核回收磁盘空间的场景。
服务器 / 优化器
允许继承表扫描返回有意义的排序结果(Greg Stark、Hans-Jurgen Schonig、Robert Haas、Tom Lane)
这允许对继承表上使用 ORDER BY、LIMIT 或 MIN/MAX 的查询做更好的优化。
服务器 / 优化器
改进 GIN 索引扫描的代价估计(Teodor Sigaev)
服务器 / 优化器
改进聚合和窗口函数的代价估计(Tom Lane)
服务器 / 认证
在 pg_hba.conf 中支持主机名和主机后缀(例如 .example.com)(Peter Eisentraut)
此前只支持主机 IP 地址和 CIDR 值。
服务器 / 认证
在 pg_hba.conf 的 host 列中支持关键字 all(Peter Eisentraut)
此前人们为此使用 0.0.0.0/0 或 ::/0。
服务器 / 认证
在不支持 Unix 套接字连接的平台上拒绝 pg_hba.conf 中的 local 行(Magnus Hagander)
此前这类行会被静默忽略,这可能令人意外。这使该行为更像其他不受支持的情况。
服务器 / 认证
重写 peer 认证,避免使用凭据控制消息(Tom Lane)
此变更使 peer 认证代码更简单、性能更好。但它要求平台提供 getpeereid 函数或等效的套接字操作。据我们所知,唯一此前 peer 认证可用而现在不可用的平台是 5.0 之前的 NetBSD。
服务器 / 监控
为重启点和检查点的日志记录添加细节,它由 log_checkpoints 控制(Fujii Masao、Greg Smith)
新增细节包括 WAL 文件和同步活动。
服务器 / 监控
新增 log_file_mode,控制日志收集器创建的日志文件的权限(Martin Pihlak)
服务器 / 监控
把 syslog 日志的默认最大行长降低到 900 字节加前缀(Noah Misch)
这避免了在有 1KB(而非更常见的 2KB)长度限制的 syslog 实现上长日志行被截断。
服务器 / 统计视图
为 pg_stat_activity 新增 client_hostname 列(Peter Eisentraut)
此前只报告客户端地址。
服务器 / 统计视图
新增 pg_stat_xact_* 统计函数和视图(Joel Jacobson)
它们类似于数据库范围的统计计数器视图,但只反映当前事务的计数。
服务器 / 统计视图
在数据库级和后台写入进程统计视图中新增上次重置时间(Tomas Vondra)
服务器 / 统计视图
在 pg_stat_*_tables 视图中新增显示清理和分析操作次数的列(Magnus Hagander)
服务器 / 统计视图
为 pg_stat_bgwriter 新增 buffers_backend_fsync 列(Greg Smith)
这个新列统计后端对缓冲区执行 fsync 的次数。
服务器 / 服务器设置
提供 wal_buffers 的自动调整(Greg Smith)
默认情况下,wal_buffers 的值现在根据 shared_buffers 的值自动选择。
服务器 / 服务器设置
提高 deadlock_timeout、log_min_duration_statement 和 log_autovacuum_min_duration 的最大值(Peter Eisentraut)
这些参数此前的最大值都只有约 35 分钟。现在允许大得多的值。
复制和恢复 / 流复制和连续归档
允许同步复制(Simon Riggs、Fujii Masao)
这允许主服务器等待备库把事务信息写入磁盘后再确认提交。每次只有一个备库可以充当同步备库的角色,由 synchronous_standby_names 设置控制。可以使用 synchronous_commit 设置按事务启用或禁用同步复制。
复制和恢复 / 流复制和连续归档
新增协议支持,使用流复制网络连接向备库服务器发送文件系统备份(Magnus Hagander、Heikki Linnakangas)
这避免了搭建备库服务器时手工传输文件系统备份的要求。
复制和恢复 / 流复制和连续归档
新增 replication_timeout 设置(Fujii Masao、Heikki Linnakangas)
空闲时间超过 replication_timeout 间隔的复制连接将被自动终止。此前,失败的连接通常要等到 TCP 超时才会被检测到,这在许多情况下长得不方便。
复制和恢复 / 流复制和连续归档
新增命令行工具pg_basebackup,用于创建新的备库服务器或数据库备份(Magnus Hagander)
复制和恢复 / 流复制和连续归档
为角色新增复制权限(Magnus Hagander)
这是一个用于流复制的只读权限。它允许非超级用户角色用于复制连接。此前只有超级用户可以发起复制连接;超级用户默认仍拥有此权限。
复制和恢复 / 复制监控
新增系统视图 pg_stat_replication,显示 WAL 发送端进程的活动(Itagaki Takahiro、Simon Riggs)
它报告所有已连接备库服务器的状态。
复制和恢复 / 复制监控
新增监控函数 pg_last_xact_replay_timestamp()(Fujii Masao)
它返回主库生成备库上已应用的最新的提交或中止记录的时间。
复制和恢复 / 热备
新增配置参数 hot_standby_feedback,使备库可以推迟主库上旧行版本的清理(Simon Riggs)
这有助于避免取消备库上的长时间运行查询。
复制和恢复 / 热备
新增系统视图 pg_stat_database_conflicts,显示已被取消的查询及其原因(Magnus Hagander)
取消可能因表空间被删除、锁超时、旧快照、被固定的缓冲区和死锁而发生。
复制和恢复 / 热备
为 pg_stat_database 新增 conflicts 计数(Magnus Hagander)
这是该数据库中发生的冲突数量。
复制和恢复 / 热备
提高 max_standby_archive_delay 和 max_standby_streaming_delay 的最大值
这些参数此前的最大值都只有约 35 分钟。现在允许大得多的值。
复制和恢复 / 热备
新增错误码 ERRCODE_T_R_DATABASE_DROPPED,用于报告因数据库被删除导致的恢复冲突(Tatsuo Ishii)
这对连接池软件很有用。
复制和恢复 / 恢复控制
新增控制流复制重放的函数(Simon Riggs)
新函数为 pg_xlog_replay_pause()、pg_xlog_replay_resume() 和状态函数 pg_is_xlog_replay_paused()。
复制和恢复 / 恢复控制
新增 recovery.conf 设置 pause_at_recovery_target,用于在目标处暂停恢复(Simon Riggs)
这允许查询恢复服务器以检查恢复点是否是期望的那个。
复制和恢复 / 恢复控制
新增使用 pg_create_restore_point() 创建命名还原点的能力(Jaime Casanova)
这些命名还原点可以通过新的 recovery.conf 设置 recovery_target_name 指定为恢复目标。
复制和恢复 / 恢复控制
允许备库恢复自动切换到新时间线(Heikki Linnakangas)
现在备库服务器会定期扫描归档目录以发现新时间线。
复制和恢复 / 恢复控制
新增 restart_after_crash 设置,用于在后端崩溃后禁用自动服务器重启(Robert Haas)
这允许外部集簇管理软件控制数据库服务器是否重启。
复制和恢复 / 恢复控制
允许 recovery.conf 使用与 postgresql.conf 相同的引号行为(Dimitri Fontaine)
此前所有值都必须加引号。
查询
新增真正的可序列化隔离级别(Kevin Grittner、Dan Ports)
此前,请求可序列化隔离只保证整个事务使用单个 MVCC 快照,这允许某些已记载的异常。旧的快照隔离行为仍可通过请求 REPEATABLE READ 隔离级别获得。
查询
允许在 WITH 子句中使用数据修改命令(INSERT/UPDATE/DELETE)(Marko Tiikkaja、Hitoshi Harada)
这些命令可以使用 RETURNING 把数据传递给包含它们的查询。
查询
允许把 WITH 子句附加到 INSERT、UPDATE、DELETE 语句(Marko Tiikkaja、Hitoshi Harada)
查询
当在 GROUP BY 子句中指定了主键时,允许查询目标列表中出现非 GROUP BY 列(Peter Eisentraut)
SQL 标准允许这种行为,而且由于有主键,结果是无歧义的。
查询
允许在 UNION/INTERSECT/EXCEPT 子句中使用关键字 DISTINCT(Tom Lane)
DISTINCT 是默认行为,因此使用该关键字是冗余的,但 SQL 标准允许。
查询
修复带规则的普通查询,使其使用与 EXPLAIN ANALYZE 相同的快照行为(Marko Tiikkaja)
此前 EXPLAIN ANALYZE 对涉及规则的查询使用的快照时机略有不同。EXPLAIN ANALYZE 的行为被认为更合逻辑。
查询 / 字符串
新增逐列排序规则支持(Peter Eisentraut、Tom Lane)
此前排序规则(文本字符串的排序顺序)只能在创建数据库时选择。现在可以通过 SQL 标准的 COLLATE 子句逐列、逐域、逐索引或逐表达式设置排序规则。
对象操作
新增扩展,简化 PostgreSQL 附加功能的打包(Dimitri Fontaine、Tom Lane)
扩展由新的 CREATE/ALTER/DROP EXTENSION 命令控制。这取代了对添加到 PostgreSQL 安装的对象进行分组的临时方法。
对象操作
新增对外部表的支持(Shigeru Hanada、Robert Haas、Jan Urbanski、Heikki Linnakangas)
这允许像使用 PostgreSQL 原生存储的数据一样使用存储在数据库之外的数据。但外部表目前是只读的。
对象操作
允许通过 ALTER TYPE 向现有枚举类型添加新值(Andrew Dunstan)
对象操作
新增 ALTER TYPE ... ADD/DROP/ALTER/RENAME ATTRIBUTE(Peter Eisentraut)
这允许修改组合类型。
对象操作 / ALTER Object
为类型化表上的 ALTER TYPE 操作新增 RESTRICT/CASCADE(Peter Eisentraut)
这控制 ADD/DROP/ALTER/RENAME ATTRIBUTE 的级联行为。
对象操作 / ALTER Object
支持 ALTER TABLE (Noah Misch)name {OF | NOT OF} type
该语法允许把独立表变成类型化表,或把类型化表变成独立表。
对象操作 / ALTER Object
为 ALTER ... SET SCHEMA 命令中的更多对象类型新增支持(Dimitri Fontaine)
该命令现在支持转换、操作符、操作符类、操作符族、文本搜索配置、文本搜索词典、文本搜索解析器和文本搜索模板。
对象操作 / CREATE/ALTER TABLE
新增 ALTER TABLE ... ADD UNIQUE/PRIMARY KEY USING INDEX(Gurjeet Singh)
这允许使用现有唯一索引(包括并发创建的唯一索引)来定义主键或唯一约束。
对象操作 / CREATE/ALTER TABLE
允许 ALTER TABLE 添加未经验证的外键(Simon Riggs)
新选项名为 NOT VALID。约束的状态之后可以改为 VALIDATED 并执行验证检查。这两者相结合,使你能够以对读写操作影响最小的方式添加外键。
对象操作 / CREATE/ALTER TABLE
允许 ALTER TABLE ... SET DATA TYPE 在适当情况下避免重写表(Noah Misch、Robert Haas)
例如,把 varchar 列转换为 text 不再需要重写表。但增大 varchar 列的长度约束仍需要重写表。
对象操作 / CREATE/ALTER TABLE
新增 CREATE TABLE IF NOT EXISTS 语法(Robert Haas)
这允许在表已存在时创建表而不报错。
对象操作 / CREATE/ALTER TABLE
修复当两个后端同时尝试向同一个表添加继承子表时可能出现的 “tuple concurrently updated” 错误(Robert Haas)
ALTER TABLE 现在对父表持有更强的锁,使会话无法同时尝试更新它。
对象操作 / 对象权限
新增 SECURITY LABEL 命令(KaiGai Kohei)
这允许为对象分配安全标签。
工具操作
新增事务级咨询锁(Marko Tiikkaja)
它们类似于现有的会话级咨询锁,但这类锁会在事务结束时自动释放。
工具操作
让 TRUNCATE ... RESTART IDENTITY 以事务方式重启序列(Steve Singer)
此前,如果后端在提交时截断活动与提交完成之间崩溃,计数器可能失去同步。
工具操作 / COPY
为 COPY TO/FROM 新增 ENCODING 选项(Hitoshi Harada、Itagaki Takahiro)
这允许单独指定 COPY 文件的编码,而不是跟随客户端编码。
工具操作 / COPY
新增双向 COPY 协议支持(Fujii Masao)
这目前只被流复制使用。
工具操作 / EXPLAIN
让 EXPLAIN VERBOSE 显示 FunctionScan 节点中的函数调用表达式(Tom Lane)
工具操作 / VACUUM
为 VACUUM FULL VERBOSE 和 CLUSTER VERBOSE 的输出添加更多细节(Itagaki Takahiro)
新信息包括存活和死亡元组计数,以及 CLUSTER 是否使用索引重建。
工具操作 / VACUUM
防止自动清理在无法获得表锁时等待(Robert Haas)
它会在稍后再次尝试清理该表。
工具操作 / CLUSTER
当看起来更廉价时,允许 CLUSTER 对表排序而不是扫描索引(Leonardo Francalanci)
工具操作 / 索引
为 GiST 索引新增最近邻(按操作符排序)搜索(Teodor Sigaev、Tom Lane)
这允许 GiST 索引在带 LIMIT 的查询中快速返回最接近的 N 个值。例如
SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
找出最接近给定目标点的十个地点。
工具操作 / 索引
允许 GIN 索引索引空值和空字符串(Tom Lane)
这允许完整的 GIN 索引扫描,并修复了 GIN 扫描会失败的各种极端情况。
工具操作 / 索引
让 GIN 索引更好地识别重复的搜索条目(Tom Lane)
这降低了索引扫描的代价,尤其是在能避免不必要的全索引扫描的情况下。
工具操作 / 索引
修复 GiST 索引,使其完全崩溃安全(Heikki Linnakangas)
此前有少数情况需要执行 REINDEX(你会被告知)。
数据类型
允许 numeric 在常见情况下使用更紧凑的两字节头(Robert Haas)
此前所有 numeric 值都使用四字节头;此变更节省了磁盘存储。
数据类型
新增 money 除以 money 的支持(Andy Balholm)
数据类型
允许 void 类型的二进制 I/O(Radoslaw Smogura)
数据类型
改进几何操作符的斜边计算(Paul Matthews)
这避免了不必要的溢出,而且可能更精确。
数据类型
支持对数组值做哈希(Tom Lane)
这提供了额外的查询优化可能性。
数据类型
除非组合类型的所有列类型都可排序,否则不把该组合类型视为可排序(Tom Lane)
如果查询可以在不排序的情况下实现,这避免了运行时可能出现的 “could not identify a comparison function” 失败。此外,ANALYZE 也不会尝试对这类组合类型的列使用不适当的统计收集方法。
数据类型 / 类型转换
新增 money 与 numeric 之间转换的支持(Andy Balholm)
数据类型 / 类型转换
新增从 int4 和 int8 到 money 转换的支持(Joey Adams)
数据类型 / 类型转换
如果表是类型化表,允许把表的行类型转换为该表的超类型(Peter Eisentraut)
这类似于允许把行类型转换为超表的行类型的现有机制。
数据类型 / XML
新增 XML 函数 XMLEXISTS 和 xpath_exists()(Mike Fowler)
它们用于 XPath 匹配。
数据类型 / XML
新增 XML 函数 xml_is_well_formed()、xml_is_well_formed_document() 和 xml_is_well_formed_content()(Mike Fowler)
它们检查输入是否为格式正确的 XML。它们提供了此前只能在已弃用的 contrib/xml2 模块中使用的功能。
函数
新增 SQL 函数 format(text, ...),其行为类似于 C 的 printf()(Pavel Stehule、Robert Haas)
它目前支持字符串、SQL 字面量和 SQL 标识符的格式。
函数
新增字符串函数 concat()、concat_ws()、left()、right() 和 reverse()(Pavel Stehule)
这些改进了与其他数据库产品的兼容性。
函数
新增用于读取二进制文件的函数 pg_read_binary_file()(Dimitri Fontaine、Itagaki Takahiro)
函数
新增函数 pg_read_file() 的单参数版本,用于读取整个文件(Dimitri Fontaine、Itagaki Takahiro)
函数
新增 array_to_string() 和 string_to_array() 的三参数形式,用于控制空值处理(Pavel Stehule)
函数 / 对象信息函数
新增函数 pg_describe_object()(Alvaro Herrera)
该函数用于根据 pg_class OID、对象 OID 和子对象 ID 获取描述对象的人类可读字符串。它可用于帮助解释 pg_depend 的内容。
函数 / 对象信息函数
更新内建操作符及其底层函数的注释(Tom Lane)
旨在通过关联操作符使用的函数现在被这样注释。
函数 / 对象信息函数
新增变量 quote_all_identifiers,强制为 EXPLAIN 以及 pg_get_viewdef() 等系统目录函数中的所有标识符加引号(Robert Haas)
这使得把模式导出到具有不同引号规则的工具和其他数据库更加容易。
函数 / 对象信息函数
为 information_schema.sequences 系统视图新增列(Peter Eisentraut)
此前虽然视图存在,但关于序列参数的列未实现。
函数 / 对象信息函数
允许在 has_table_privilege() 及相关函数中使用 public 作为伪角色名(Alvaro Herrera)
这允许检查公共权限。
函数 / 函数和触发器创建
支持视图上的 INSTEAD OF 触发器(Dean Rasheed)
此特性可用于实现完全可更新的视图。
服务器端语言 / PL/pgSQL Server-Side Language
为 PL/pgSQL 新增 FOREACH IN ARRAY(Pavel Stehule)
这比此前遍历数组值元素的方法更高效也更易读。
服务器端语言 / PL/pgSQL Server-Side Language
允许在同一位置能够捕获 RAISE ERROR 的地方捕获无参数的 RAISE(Piyush Newe)
先前的编码会从包含活动异常处理程序的块抛出错误。新行为与其他 DBMS 产品更一致。
服务器端语言 / PL/Perl Server-Side Language
允许 PL/Perl 函数接受通用 record 参数(Andrew Dunstan)
PL/Perl 函数现在可以声明为接受 record 类型。其行为与任何命名的组合类型相同。
服务器端语言 / PL/Perl Server-Side Language
把 PL/Perl 的数组参数转换为 Perl 数组(Alexey Klyukin、Alex Hunsaker)
字符串表示仍然可用。
服务器端语言 / PL/Perl Server-Side Language
把 PL/Perl 的组合类型参数转换为 Perl 哈希(Alexey Klyukin、Alex Hunsaker)
字符串表示仍然可用。
服务器端语言 / PL/Python Server-Side Language
为 PL/Python 新增表函数支持(Jan Urbanski)
PL/Python 现在可以返回多个 OUT 参数和记录集。
服务器端语言 / PL/Python Server-Side Language
为 PL/Python 新增验证器(Jan Urbanski)
这允许在创建函数时对 PL/Python 函数做语法检查。
服务器端语言 / PL/Python Server-Side Language
允许 PL/Python 中 SQL 查询的异常(Jan Urbanski)
这允许从 PL/Python 异常块访问 SQL 生成的异常错误码。
服务器端语言 / PL/Python Server-Side Language
为 PL/Python 新增显式子事务(Jan Urbanski)
服务器端语言 / PL/Python Server-Side Language
为 PL/Python 新增字符串加引号函数(Jan Urbanski)
这些函数是 plpy.quote_ident、plpy.quote_literal 和 plpy.quote_nullable。
服务器端语言 / PL/Python Server-Side Language
为 PL/Python 错误添加回溯信息(Jan Urbanski)
服务器端语言 / PL/Python Server-Side Language
用 PLy_elog 报告迭代器的 PL/Python 错误(Jan Urbanski)
服务器端语言 / PL/Python Server-Side Language
修复 Python 3 的异常处理(Jan Urbanski)
此前在 Python 3 下 plpy 中没有异常类。
客户端应用程序
由于createlang和droplang现在只是调用扩展命令,将其标记为已弃用(Tom Lane)
客户端应用程序 / psql
新增 psql 命令 \conninfo,用于显示当前连接信息(David Christensen)
客户端应用程序 / psql
新增 psql 命令 \sf,用于显示函数定义(Pavel Stehule)
客户端应用程序 / psql
新增 psql 命令 \dL,用于列出语言(Fernando Ike)
客户端应用程序 / psql
为 psql 的 \dn(列出模式)命令新增 S(“system”)选项(Tom Lane)
不带 S 的 \dn 现在会隐藏系统模式。
客户端应用程序 / psql
允许 psql 的 \e 和 \ef 命令接受行号以定位编辑器中的光标(Pavel Stehule)
该行号根据 PSQL_EDITOR_LINENUMBER_ARG 环境变量传递给编辑器。
客户端应用程序 / psql
让 psql 默认根据操作系统区域设置客户端编码(Heikki Linnakangas)
这只在未设置 PGCLIENTENCODING 环境变量时发生。
客户端应用程序 / psql
让 \d 区分唯一索引和唯一约束(Josh Kupershmidt)
客户端应用程序 / psql
让 \dt+ 在连接 9.0 或更高版本服务器时报告 pg_table_size 而不是 pg_relation_size(Bernd Helmle)
这是更有用的表大小度量,但注意它与此前同一显示中报告的值并不相同。
客户端应用程序 / psql
更多 Tab 补全支持(Itagaki Takahiro、Pavel Stehule、Andrey Popp、Christoph Berg、David Fetter、Josh Kupershmidt)
客户端应用程序 / pg_dump
为pg_dump和pg_dumpall新增选项 --quote-all-identifiers,强制为所有标识符加引号(Robert Haas)
客户端应用程序 / pg_dump
为 pg_dump 新增 directory 格式(Joachim Wieland、Heikki Linnakangas)
它在内部类似于 pg_dump 的 tar 格式。
客户端应用程序 / pg_ctl
修复 pg_ctl,使其不再错误地报告服务器未运行(Bruce Momjian)
此前当服务器在运行但 pg_ctl 无法认证时可能发生这种情况。
客户端应用程序 / pg_ctl
改进 pg_ctl start 的“等待”(-w)选项(Bruce Momjian、Tom Lane)
等待模式现在明显更健壮。它不会因非默认的 postmaster 端口号、非默认的 Unix 域套接字位置、权限问题或过期的 postmaster 锁文件而困惑。
客户端应用程序 / pg_ctl
为 pg_ctl 新增 promote 选项,用于把备库切换为主库(Fujii Masao)
Development Tools / libpq
新增 libpq 连接选项 client_encoding,其行为类似于 PGCLIENTENCODING 环境变量(Heikki Linnakangas)
值 auto 根据操作系统区域设置客户端编码。
Development Tools / libpq
新增函数 PQlibVersion(),返回 libpq 库版本(Magnus Hagander)
libpq 此前已有返回服务器版本的 PQserverVersion()。
Development Tools / libpq
允许使用 libpq 的客户端在通过 Unix 域套接字连接时检查服务器进程的用户名,使用新的 requirepeer 连接选项(Peter Eisentraut)
PostgreSQL 此前已允许服务器在通过 Unix 域套接字连接时检查客户端用户名。
Development Tools / libpq
为 libpq 新增 PQping() 和 PQpingParams()(Bruce Momjian、Tom Lane)
这些函数允许在不尝试打开新会话的情况下检测服务器状态。
Development Tools / ECPG
允许 ECPG 即使在 WHERE CURRENT OF 子句中也接受动态游标名(Zoltan Boszormenyi)
Development Tools / ECPG
让 ecpglib 以 15 位精度写 double 值,而不是此前的 14 位(Akira Kurosawa)
构建选项
对接受它的 HP-UX C 编译器使用 +Olibmerrno 编译标志(Ibrar Ahmed)
这避免了较新 HP 平台上数学库调用可能的不当行为。
构建选项 / Makefile
改进的并行 make 支持(Peter Eisentraut)
这使编译更快。此外,make -k 现在工作得更一致。
构建选项 / Makefile
要求 GNU make 3.80 或更新版本(Peter Eisentraut)
由于并行 make 的改进,这是必要的。
构建选项 / Makefile
新增 make maintainer-check 目标(Peter Eisentraut)
该目标执行各种既不适合构建也不适合回归测试的源代码检查。目前包括:duplicate_oids、SGML 语法和制表符检查、NLS 语法检查。
构建选项 / Makefile
在 contrib 中支持 make check(Peter Eisentraut)
此前只有 make installcheck 可用,但现在支持在临时安装中测试。顶层的 make check-world 目标现在包括以这种方式测试 contrib。
构建选项 / Windows
在 Windows 上,允许pg_ctl把服务注册为自动启动或按需启动(Quan Zongliang)
构建选项 / Windows
新增在 Windows 上收集崩溃转储的支持(Craig Ringer、Magnus Hagander)
现在可以由非调试的 Windows 二进制生成 minidumps,并用标准调试工具分析。
构建选项 / Windows
支持使用 MinGW64 编译器构建(Andrew Dunstan)
这允许通过交叉编译即使在非 Windows 平台上也能构建 64 位 Windows 二进制。
源代码
修订 GUC 变量赋值钩子的 API(Tom Lane)
此前赋值钩子的职能现在拆分到检查钩子和赋值钩子之间,前者可以失败而后者不应失败。此变更会影响定义自定义 GUC 参数的附加模块。
源代码
在源代码中新增闩锁以支持等待事件(Heikki Linnakangas)
源代码
集中化数据修改权限检查逻辑(KaiGai Kohei)
源代码
为一致性补齐缺失的 get_ 函数(Robert Haas)object_oid()
源代码
通过移除冲突的关键字,改进使用 C++ 编译器编译附加模块的能力(Tom Lane)
源代码
新增对 DragonFly BSD 的支持(Rumko)
源代码
为后端使用公开 quote_literal_cstr()(Robert Haas)
源代码
以默认编码运行回归测试(Peter Eisentraut)
回归测试此前总是以 SQL_ASCII 编码运行。
源代码
新增 src/tools/git_changelog 以取代 cvs2cl 和 pgcvslog(Robert Haas、Tom Lane)
源代码
向 src/tools 添加 git-external-diff 脚本(Bruce Momjian)
它用于从 git 生成上下文差异。
源代码
改进对使用 Clang 构建的支持(Peter Eisentraut)
源代码 / 服务器钩子
新增用于检查权限的源代码钩子(Robert Haas、Stephen Frost)
源代码 / 服务器钩子
新增供安全框架使用的对象创建后函数钩子(KaiGai Kohei)
源代码 / 服务器钩子
新增客户端认证钩子(KaiGai Kohei)
附加模块
修改 contrib 模块和过程语言,使其通过新的扩展机制安装(Tom Lane、Dimitri Fontaine)
附加模块
新增 contrib/file_fdw 外部数据包装器(Shigeru Hanada)
使用这个外部数据包装器的外部表可以以非常类似于 COPY 的方式读取平面文件。
附加模块
为 contrib/pg_trgm 和 contrib/btree_gist 新增最近邻搜索支持(Teodor Sigaev)
附加模块
为 contrib/btree_gist 新增不相等搜索支持(Jeff Davis)
附加模块
修复 contrib/fuzzystrmatch 的 levenshtein() 函数,使其处理多字节字符(Alexander Korotkov)
附加模块
为 contrib/sslinfo 新增 ssl_cipher() 和 ssl_version() 函数(Robert Haas)
附加模块
修复 contrib/intarray 和 contrib/hstore,使其对索引的空数组给出一致结果(Tom Lane)
此前使用索引的空数组查询可能返回与使用顺序扫描不同的结果。
附加模块
让 contrib/intarray 在多维数组上正确工作(Tom Lane)
附加模块
在 contrib/intarray 中,避免在实际不存在空值的场合报错抱怨存在空值(Tom Lane)
附加模块
在 contrib/intarray 中,修复包含操作符对空数组的行为(Tom Lane)
空数组现在被正确地视为包含于任何其他数组。
附加模块
移除 contrib/xml2 对 xslt_process() 可处理的 parameter=value 对数量的任意限制(Pavel Stehule)
此前的限制是 10。
附加模块
在 contrib/pageinspect 中,修复 heap_page_item 以 32 位值返回 infomask(Alvaro Herrera)
这避免了返回负值(那令人困惑)。底层值是 16 位无符号整数。
附加模块 / 安全
新增 contrib/sepgsql,使权限检查与 SELinux 接口(KaiGai Kohei)
它使用新的 SECURITY LABEL 机制。
附加模块 / 安全
新增 contrib 模块 auth_delay(KaiGai Kohei)
它使服务器在返回认证失败前暂停;其设计目的是加大暴力破解口令攻击的难度。
附加模块 / 安全
新增 dummy_seclabel contrib 模块(KaiGai Kohei)
它用于权限回归测试。
附加模块 / 性能
为 contrib/pg_trgm 新增 LIKE 和 ILIKE 索引搜索支持(Alexander Korotkov)
附加模块 / 性能
为 contrib/fuzzystrmatch 新增针对小距离优化的函数 levenshtein_less_equal()(Alexander Korotkov)
附加模块 / 性能
改进 contrib/seg 列上索引查找的性能(Alexander Korotkov)
附加模块 / 性能
改进pg_upgrade在多关系数据库下的性能(Bruce Momjian)
附加模块 / 性能
为 contrib/pgbench 新增报告逐语句延迟的标志(Florian Pflug)
附加模块 / fsync 测试
把 src/tools/test_fsync 移到 contrib/pg_test_fsync(Bruce Momjian、Tom Lane)
附加模块 / fsync 测试
为 contrib/pg_test_fsync 新增 O_DIRECT 支持(Bruce Momjian)
这与 wal_sync_method 对 O_DIRECT 的使用相匹配。
附加模块 / fsync 测试
为 contrib/pg_test_fsync 新增新测试(Bruce Momjian)
文档
广泛的ECPG文档改进(Satoshi Nagayasu)
文档
广泛的校对和文档改进(Thom Brown、Josh Kupershmidt、Susanne Ebrecht)
文档
为 exit_on_error 添加文档(Robert Haas)
该参数使会话在任何错误时退出。
文档
为 pg_options_to_table() 添加文档(Josh Berkus)
该函数以可读的形式显示表存储选项。
文档
记录可以使用 (compositeval).* 语法访问所有组合类型字段(Peter Eisentraut)
文档
记录 translate() 会删除 from 中没有对应 to 字符的字符(Josh Kupershmidt)
文档
合并 CREATE CONSTRAINT TRIGGER 和 CREATE TRIGGER 的文档(Alvaro Herrera)
文档
为 Solaris 10 添加内核调优文档(Josh Berkus)
此前只记录了 Solaris 9 的内核调优。
文档
在 HISTORY 文件中一致地处理非 ASCII 字符(Peter Eisentraut)
虽然 HISTORY 文件是英文的,但我们必须处理贡献者姓名中的非 ASCII 字母。这些现在被音译,以便在不假设字符集的情况下也相当易读。
试试其他关键词,或。
对比以 PostgreSQL 发行说明为依据,汇总起始版本之后、目标版本及之前的变更,支持同一大版本内的小版本更新,以及跨大版本升级。跨大版本时,旧分支的维护记录只纳入到下一大版本首次发布之日,所有记录均不晚于目标版本的发布日期。大版本名称(如 18)指首个正式版本(18.0);测试版与开发快照会单独标注。
条目正文来自本站中文手册,版本清单、条目覆盖与提交依据逐一核对上游英文原文。每条变更保留完整说明与原文链接;分类用于辅助浏览,具体影响、适用条件与升级操作请阅读条目正文和各版本的升级说明。
同一修复可能回补到多个版本分支。对比会保守合并可确认相同的条目,并保留各分支完整说明;已知由起始版本包含的修复会排除。一条说明包含多个独立修复时,只有全部已包含才排除。大版本新功能不因与旧版补丁存在提交关联而合并,不能确认相同的条目继续保留。这是发行说明的累计差异,不能覆盖二进制程序之间的每一处代码变化。
CVE 独立依据 PostgreSQL 官方安全公告与漏洞记录计算:起始版本受影响、目标版本已修复或不受影响的漏洞才计入,按编号去重。目标版本仍受影响的漏洞另行提示;安全变更条数与 CVE 数量分别统计。
交互参考 pgversions.com 与 pgversionreport,内容来自 PostgreSQL 发行说明。更多历史资料见发行说明归档。