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

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

文档版本对比

POSTGRESQL · VERSION COMPARE

PostgreSQL 9.0 的版本变更

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

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

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

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

本次发布的全部变更

9.0

2010-09-20

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

9.0.0 历史版本维护截止 2015-10-08

PostgreSQL 9.0

升级与兼容性说明

对于希望从任何早期版本迁移数据的用户,需要使用 pg_dump 进行转储/恢复,或者使用 pg_upgrade。

版本 9.0 包含一些为支持新特性和代码质量改进而有选择地破坏向后兼容性的变更。特别是,大量使用 PL/pgSQL、时间点恢复(PITR)或温备的用户应测试其应用,因为这些领域有轻微的用户可见变化。请注意以下不兼容之处:

兼容性变化移除服务器参数 add_missing_from(多年来默认关闭)

服务器设置

移除服务器参数 add_missing_from(多年来默认关闭)(Tom Lane)

兼容性变化移除服务器参数 regex_flavor(多年来默认为 advanced)

服务器设置

移除服务器参数 regex_flavor(多年来默认为 advanced)(Tom Lane)

兼容性变化archive_mode 现在只影响 archive_command;新设置 wal_level 影响预写式日志的内容

服务器设置

archive_mode 现在只影响 archive_command;新设置 wal_level 影响预写式日志的内容(Heikki Linnakangas)

兼容性变化log_temp_files 现在默认文件大小单位为千字节

服务器设置

log_temp_files 现在默认文件大小单位为千字节(Robert Haas)

兼容性变化查询父表时,不再对作为查询一部分被扫描的子表做单独的权限检查

查询

查询父表时,不再对作为查询一部分被扫描的子表做单独的权限检查(Peter Eisentraut)

SQL 标准规定了这种行为,而且实践中它也比此前同时检查每个子表和父表权限的行为方便得多。

兼容性变化bytea 输出现在默认以十六进制格式显示

数据类型

bytea 输出现在默认以十六进制格式显示(Peter Eisentraut)

如有兼容需要,可使用服务器参数 bytea_output 选择传统输出格式。

兼容性变化数组输入现在只把普通 ASCII 空白字符视为可能可忽略;它永远不会忽略非 ASCII 字符,即使按某些区域设置它们是空白

数据类型

数组输入现在只把普通 ASCII 空白字符视为可能可忽略;它永远不会忽略非 ASCII 字符,即使按某些区域设置它们是空白(Tom Lane)

这避免了一些数组值可能因服务器区域设置不同而被不同解释的极端情况。

兼容性变化改进 SIMILAR TO 模式和 SQL 风格 substring() 模式的标准符合性

数据类型

改进 SIMILAR TO 模式和 SQL 风格 substring() 模式的标准符合性(Tom Lane)

这包括把 ? 和 {...} 视为模式元字符(它们此前是普通字面字符);这对应 SQL:2008 新增的特性。此外,^ 和 $ 现在被视为普通字面字符;此前它们被视为元字符,就好像模式遵循 POSIX 而不是 SQL 规则。另外,在 SQL 标准 substring() 中,用括号嵌套不再干扰子串的捕获。另外,方括号表达式(字符类)的处理现在更符合标准。

兼容性变化按 SQL 标准拒绝位串 3 参数 substring() 中的负长度值

数据类型

按 SQL 标准拒绝位串 3 参数 substring() 中的负长度值(Tom Lane)

兼容性变化让 date_trunc 在降低秒的小数部分精度时截断而不是舍入

数据类型

让 date_trunc 在降低秒的小数部分精度时截断而不是舍入(Tom Lane)

对于基于整数的日期/时间,代码一直如此。现在基于浮点的日期/时间行为类似。

兼容性变化当子表从多个不相关的父表继承同一列时,收紧 RENAME 期间列名一致性的强制

对象重命名

当子表从多个不相关的父表继承同一列时,收紧 RENAME 期间列名一致性的强制(KaiGai Kohei)

兼容性变化不再在底层表列被重命名时自动重命名索引和索引列

对象重命名

不再在底层表列被重命名时自动重命名索引和索引列(Tom Lane)

管理员仍可以手工重命名这类索引和列。此变更需要更新 JDBC 驱动(可能还有其他驱动),以便重命名后仍能正确识别唯一索引。

兼容性变化CREATE OR REPLACE FUNCTION 不再能更改函数参数的声明名称

对象重命名

CREATE OR REPLACE FUNCTION 不再能更改函数参数的声明名称(Pavel Stehule)

为了避免在命名参数调用中产生歧义,不再允许更改现有函数声明中输入参数的别名(但仍可为此前未命名的参数指定名称)。现在必须 DROP 并重建函数才能做到这一点。

兼容性变化当变量名与查询中使用的列名冲突时,PL/pgSQL 现在抛出错误

PL/pgSQL

当变量名与查询中使用的列名冲突时,PL/pgSQL 现在抛出错误(Tom Lane)

此前的行为是把有歧义的名称优先绑定到 PL/pgSQL 变量而不是查询列,这常常导致令人惊讶的错误行为。抛出错误可以轻松检测歧义情况。虽然建议修改遇到此类错误的函数以消除冲突,但如有必要,可以通过配置参数 plpgsql.variable_conflict 或逐函数选项 #variable_conflict 恢复旧行为。

兼容性变化PL/pgSQL 不再允许与某些 SQL 保留字匹配的变量名

PL/pgSQL

PL/pgSQL 不再允许与某些 SQL 保留字匹配的变量名(Tom Lane)

这是使 PL/pgSQL 解析器与核心 SQL 解析器更紧密对齐的结果。如有必要,可以为变量名加双引号来避开此限制。

兼容性变化PL/pgSQL 现在要求组合结果的列不仅匹配基本类型,还要匹配预期的类型修饰符

PL/pgSQL

PL/pgSQL 现在要求组合结果的列不仅匹配基本类型,还要匹配预期的类型修饰符(Pavel Stehule、Tom Lane)

例如,如果结果类型的某列声明为 NUMERIC(30,2),则在该列中返回其他精度的 NUMERIC 不再被接受。以前的版本疏于检查类型修饰符,因此会允许实际上不符合声明限制的结果行。

兼容性变化PL/pgSQL 现在更一致地处理选择到组合字段的情况

PL/pgSQL

PL/pgSQL 现在更一致地处理选择到组合字段的情况(Tom Lane)

此前,像 SELECT ... INTO rec.fld FROM ... 这样的语句即使记录字段 fld 是组合类型,也被视为标量赋值。现在它被视为记录赋值,与 INTO 目标是组合类型的常规变量时相同。因此,要赋给字段各子字段的值应写成 SELECT 列表的单独列,而不是像以前版本那样写成 ROW(...) 构造。

如果需要以同时适用于 9.0 和以前版本的方式做到这一点,可以写成类似 rec.fld := ROW(...) FROM ...。

兼容性变化移除 PL/pgSQL 的 RENAME 声明

PL/pgSQL

移除 PL/pgSQL 的 RENAME 声明(Tom Lane)

用 ALIAS 取代 RENAME,它现在可以为任何变量创建别名,而不再像以前那样只能用于美元符号参数名(如 $1)。

兼容性变化废弃把 => 用作操作符名

其他不兼容之处

废弃把 => 用作操作符名(Robert Haas)

为了支持 SQL 标准的命名函数参数记法,未来版本的 PostgreSQL 可能会完全拒绝此操作符名。目前它仍被允许,但定义此类操作符时会发出警告。

兼容性变化移除对没有可用 64 位整数数据类型的平台的支持

其他不兼容之处

移除对没有可用 64 位整数数据类型的平台的支持(Tom Lane)

据信所有仍受支持的平台都有可用的 64 位整数数据类型。

新功能允许备库服务器接受只读查询

服务器 / 连续归档和流复制

允许备库服务器接受只读查询(Simon Riggs、Heikki Linnakangas)

此特性称为热备。有新的 postgresql.conf 和 recovery.conf 设置控制此特性,并有详尽的文档。

新功能允许把预写式日志(WAL)数据流式传输到备库服务器

服务器 / 连续归档和流复制

允许把预写式日志(WAL)数据流式传输到备库服务器(Fujii Masao、Heikki Linnakangas)

此特性称为流复制。此前 WAL 数据只能以整个 WAL 文件(通常每个 16 MB)为单位发送到备库服务器。流复制消除了这种低效,使主库上的更新能以极小延迟传播到备库服务器。有新的 postgresql.conf 和 recovery.conf 设置控制此特性,并有详尽的文档。

新功能新增 pg_last_xlog_receive_location() 和 pg_last_xlog_replay_location(),可用于监控备库服务器的 WAL 活动

服务器 / 连续归档和流复制

新增 pg_last_xlog_receive_location() 和 pg_last_xlog_replay_location(),可用于监控备库服务器的 WAL 活动(Simon Riggs、Fujii Masao、Heikki Linnakangas)

新功能允许通过 ALTER TABLESPACE ... SET/RESET 为顺序和随机页面代价估计(seq_page_cost/random_page_cost)设置逐表空间的值

服务器 / 性能

允许通过 ALTER TABLESPACE ... SET/RESET 为顺序和随机页面代价估计(seq_page_cost/random_page_cost)设置逐表空间的值(Robert Haas)

性能改进改进连接查询中 EvalPlanQual 重新检查的性能和可靠性

服务器 / 性能

改进连接查询中 EvalPlanQual 重新检查的性能和可靠性(Tom Lane)

涉及连接的 UPDATE、DELETE 和 SELECT FOR UPDATE/SHARE 查询在遇到刚更新的行时现在表现得好得多。

性能改进改进表在同一事务中较早前被创建或截断时 TRUNCATE 的性能

服务器 / 性能

改进表在同一事务中较早前被创建或截断时 TRUNCATE 的性能(Tom Lane)

性能改进改进查找继承子表的性能

服务器 / 性能

改进查找继承子表的性能(Tom Lane)

新功能移除不必要的外连接

服务器 / 优化器

移除不必要的外连接(Robert Haas)

内侧唯一且未被连接以上引用的外连接是不必要的,因此现在会被移除。这将加速许多自动生成的查询,例如对象关系映射器(ORM)创建的查询。

新功能允许 IS NOT NULL 限制使用索引

服务器 / 优化器

允许 IS NOT NULL 限制使用索引(Tom Lane)

这在包含大量空值的索引中查找 MAX()/MIN() 值时特别有用。

新功能改进优化器关于何时使用物化节点、以及 DISTINCT 用排序还是哈希的选择

服务器 / 优化器

改进优化器关于何时使用物化节点、以及 DISTINCT 用排序还是哈希的选择(Tom Lane)

新功能改进优化器对涉及 boolean <> 操作符的表达式的等价检测

服务器 / 优化器

改进优化器对涉及 boolean <> 操作符的表达式的等价检测(Tom Lane)

新功能让 GEQO 每次规划查询时使用相同的随机种子

服务器 / GEQO

让 GEQO 每次规划查询时使用相同的随机种子(Andres Freund)

虽然遗传查询优化器(GEQO)仍然随机选择计划,但它现在对相同查询总是选择相同的随机计划,从而给出更一致的性能。可以修改 geqo_seed 来试验其他计划。

新功能改进 GEQO 计划选择

服务器 / GEQO

改进 GEQO 计划选择(Tom Lane)

这避免了罕见的 “failed to make a valid plan” 错误,还应能改进规划速度。

新功能改进 ANALYZE,使其支持继承树统计信息

服务器 / 优化器统计

改进 ANALYZE,使其支持继承树统计信息(Tom Lane)

这对分区表特别有用。但自动清理尚不会在子表变化时自动重新分析父表。

新功能改进自动清理对何时需要重新分析的检测

服务器 / 优化器统计

改进自动清理对何时需要重新分析的检测(Tom Lane)

新功能改进优化器对大于/小于比较的估计

服务器 / 优化器统计

改进优化器对大于/小于比较的估计(Tom Lane)

在查找大于/小于比较的统计信息时,如果比较值位于第一个或最后一个直方图桶中,则使用索引(如果可用)获取该列当前的実際最小值或最大值。这大幅改进了对数据范围端点附近比较值的估计准确性,尤其是当范围因新数据的添加而不断变化时。

新功能允许使用 ALTER TABLE 设置不同值数量统计信息

服务器 / 优化器统计

允许使用 ALTER TABLE 设置不同值数量统计信息(Robert Haas)

这允许用户覆盖某列不同值的估计数量或百分比。此统计信息通常由 ANALYZE 计算,但估计可能不佳,尤其是在行数非常多的表上。

新功能新增对 RADIUS(远程认证拨入用户服务)认证的支持

服务器 / 认证

新增对 RADIUS(远程认证拨入用户服务)认证的支持(Magnus Hagander)

新功能允许 LDAP(轻量目录访问协议)认证以“搜索/绑定”模式运行

服务器 / 认证

允许 LDAP(轻量目录访问协议)认证以“搜索/绑定”模式运行(Robert Fleming、Magnus Hagander)

这允许先查找用户,然后系统使用为该用户返回的 DN(可分辨名称)。

新功能为 pg_hba.conf 新增 samehost 和 samenet 指定

服务器 / 认证

为 pg_hba.conf 新增 samehost 和 samenet 指定(Stef Walter)

它们分别匹配服务器的 IP 地址和子网地址。

新功能把受信任的 SSL 根证书名称传递给客户端,使客户端能返回合适的客户端证书

服务器 / 认证

把受信任的 SSL 根证书名称传递给客户端,使客户端能返回合适的客户端证书(Craig Ringer)

新功能新增客户端设置应用名的能力,它显示在 pg_stat_activity 中

服务器 / 监控

新增客户端设置应用名的能力,它显示在 pg_stat_activity 中(Dave Page)

这允许管理员按源应用刻画数据库流量并排查问题。

新功能为 log_line_prefix 新增 SQLSTATE 选项(%e)

服务器 / 监控

为 log_line_prefix 新增 SQLSTATE 选项(%e)(Guillaume Smet)

这允许用户按错误码编号汇总错误和消息的统计信息。

新功能以 UTF16 编码写入 Windows 事件日志

服务器 / 监控

以 UTF16 编码写入 Windows 事件日志(Itagaki Takahiro)

现在 Windows 上的 PostgreSQL 日志消息有了真正的多语言支持。

新功能新增 pg_stat_reset_shared('bgwriter'),用于重置后台写入进程的集簇级共享统计信息

服务器 / 统计计数器

新增 pg_stat_reset_shared('bgwriter'),用于重置后台写入进程的集簇级共享统计信息(Greg Smith)

新功能新增 pg_stat_reset_single_table_counters() 和 pg_stat_reset_single_function_counters(),允许重置单个表和函数的统计计数器

服务器 / 统计计数器

新增 pg_stat_reset_single_table_counters() 和 pg_stat_reset_single_function_counters(),允许重置单个表和函数的统计计数器(Magnus Hagander)

新功能允许基于数据库/角色组合设置配置参数

服务器 / 服务器设置

允许基于数据库/角色组合设置配置参数(Alvaro Herrera)

此前只能按数据库和按角色设置,不能组合。所有角色和数据库设置现在存储在新的 pg_db_role_setting 系统目录中。新的 psql 命令 \drds 显示这些设置。传统系统视图 pg_roles、pg_shadow 和 pg_user 不显示组合设置,因此不再完全表示用户或数据库的配置。

新功能新增服务器参数 bonjour,控制启用 Bonjour 的服务器是否通过 Bonjour 宣告自身

服务器 / 服务器设置

新增服务器参数 bonjour,控制启用 Bonjour 的服务器是否通过 Bonjour 宣告自身(Tom Lane)

默认为关闭,即不宣告。这使打包者可以分发启用 Bonjour 的构建,而不必担心个别用户不想要此特性。

新功能新增服务器参数 enable_material,控制优化器对物化节点的使用

服务器 / 服务器设置

新增服务器参数 enable_material,控制优化器对物化节点的使用(Robert Haas)

默认为开启。关闭时,优化器不会纯粹出于性能原因添加物化节点,但在正确性需要时仍会使用。

新功能更改服务器参数 log_temp_files,使其默认文件大小单位为千字节

服务器 / 服务器设置

更改服务器参数 log_temp_files,使其默认文件大小单位为千字节(Robert Haas)

此前如果未指定单位,此设置按字节解释。

新功能在重新加载 postgresql.conf 时记录参数值的变更

服务器 / 服务器设置

在重新加载 postgresql.conf 时记录参数值的变更(Peter Eisentraut)

这使管理员和安全人员可以审计数据库设置的变更,而且对检查 postgresql.conf 编辑的效果也非常方便。

新功能对自定义服务器参数正确强制超级用户权限

服务器 / 服务器设置

对自定义服务器参数正确强制超级用户权限(Tom Lane)

非超级用户不再能对服务器当前未知的参数发出 ALTER ROLE/DATABASE SET。这使服务器能够正确检查仅超级用户参数只由超级用户设置。此前,SET 会被允许,然后在会话启动时被忽略,使仅超级用户自定义参数远不如应有的有用。

新功能在应用 LIMIT 之后执行 SELECT FOR UPDATE/SHARE 处理,使返回的行数总是可预测

查询

在应用 LIMIT 之后执行 SELECT FOR UPDATE/SHARE 处理,使返回的行数总是可预测(Tom Lane)

此前,并发事务所做的更改可能导致 SELECT FOR UPDATE 意外返回少于 LIMIT 指定的行数。FOR UPDATE 与 ORDER BY 组合仍可能产生令人惊讶的结果,但可以通过把 FOR UPDATE 放在子查询中来纠正。

新功能允许混用传统与 SQL 标准的 LIMIT/OFFSET 语法

查询

允许混用传统与 SQL 标准的 LIMIT/OFFSET 语法(Tom Lane)

新功能扩展窗口函数支持的帧选项

查询

扩展窗口函数支持的帧选项(Hitoshi Harada)

帧现在可以以 CURRENT ROW 开始,并且支持 ROWS n PRECEDING/FOLLOWING 选项。

新功能让 SELECT INTO 和 CREATE TABLE AS 在其命令标签中向客户端返回行数

查询

让 SELECT INTO 和 CREATE TABLE AS 在其命令标签中向客户端返回行数(Boszormenyi Zoltan)

这可以省去一整次到客户端的往返,允许在不需要额外 COUNT 查询的情况下计算结果数和分页。

新功能在 U& 字符串和标识符中支持 Unicode 代理对(双 16 位表示)

查询 / Unicode 字符串

在 U& 字符串和标识符中支持 Unicode 代理对(双 16 位表示)(Peter Eisentraut)

新功能在 E'...' 字符串中支持 Unicode 转义

查询 / Unicode 字符串

在 E'...' 字符串中支持 Unicode 转义(Marko Kreen)

性能改进通过推迟刷盘加速 CREATE DATABASE

对象操作

通过推迟刷盘加速 CREATE DATABASE(Andres Freund、Greg Stark)

新功能只允许对表、视图和组合类型的列加注释,不允许对索引和 TOAST 表等其他关系类型

对象操作

只允许对表、视图和组合类型的列加注释,不允许对索引和 TOAST 表等其他关系类型(Tom Lane)

新功能允许创建不含任何值的枚举类型

对象操作

允许创建不含任何值的枚举类型(Bruce Momjian)

新功能让存储类型为 MAIN 的列值保留在主堆页上,除非行放不进一个页面

对象操作

让存储类型为 MAIN 的列值保留在主堆页上,除非行放不进一个页面(Kevin Grittner)

此前 MAIN 值会被强制移出到 TOAST 表,直到行大小小于页面大小的四分之一。

新功能为 ALTER TABLE DROP COLUMN 和 ALTER TABLE DROP CONSTRAINT 实现 IF EXISTS

对象操作 / ALTER TABLE

为 ALTER TABLE DROP COLUMN 和 ALTER TABLE DROP CONSTRAINT 实现 IF EXISTS(Andres Freund)

新功能允许重写表的 ALTER TABLE 命令跳过 WAL 日志记录

对象操作 / ALTER TABLE

允许重写表的 ALTER TABLE 命令跳过 WAL 日志记录(Itagaki Takahiro)

这类操作要么产生表的新副本要么回滚,因此可以跳过 WAL 归档,除非运行在连续归档模式下。这减少了 I/O 开销并改进了性能。

BUG 修复修复由非表所有者执行 ALTER TABLE table ADD COLUMN col serial 时的失败

对象操作 / ALTER TABLE

修复由非表所有者执行 ALTER TABLE table ADD COLUMN col serial 时的失败(Tom Lane)

新功能为 CREATE TABLE ... LIKE 命令新增复制 COMMENTS 和 STORAGE 设置的支持

对象操作 / CREATE TABLE

为 CREATE TABLE ... LIKE 命令新增复制 COMMENTS 和 STORAGE 设置的支持(Itagaki Takahiro)

新功能为 CREATE TABLE ... LIKE 命令新增复制所有属性的快捷方式

对象操作 / CREATE TABLE

为 CREATE TABLE ... LIKE 命令新增复制所有属性的快捷方式(Itagaki Takahiro)

新功能新增 SQL 标准的 CREATE TABLE ... OF type 命令

对象操作 / CREATE TABLE

新增 SQL 标准的 CREATE TABLE ... OF type 命令(Peter Eisentraut)

这允许创建匹配现有组合类型的表。命令中还可以指定额外的约束和默认值。

新功能新增可延迟唯一约束

对象操作 / 约束

新增可延迟唯一约束(Dean Rasheed)

这使批量更新(例如 UPDATE tab SET col = col + 1)能够在有唯一索引或标记为主键的列上可靠工作。如果约束指定为 DEFERRABLE,它将在语句末尾而不是每行更新后检查。约束检查还可以推迟到当前事务末尾,使这类更新可以分散到多个 SQL 命令中。

新功能新增排他约束

对象操作 / 约束

新增排他约束(Jeff Davis)

排他约束通过允许任意比较操作符(而不仅仅是相等)来泛化唯一约束。它们通过 CREATE TABLE CONSTRAINT ... EXCLUDE 子句创建。排他约束最常见的用途是指定列项不得重叠,而不仅仅是不相等。这对时间段和其他范围以及数组都很有用。此特性增强了许多日历、时间管理和科学应用的数据完整性检查。

新功能改进唯一约束违规错误消息,报告导致失败的值

对象操作 / 约束

改进唯一约束违规错误消息,报告导致失败的值(Itagaki Takahiro)

例如,唯一约束违规现在可能报告 Key (x)=(2) already exists。

新功能新增使用新的 GRANT/REVOKE IN SCHEMA 子句在整个模式内批量修改权限的能力

对象操作 / 对象权限

新增使用新的 GRANT/REVOKE IN SCHEMA 子句在整个模式内批量修改权限的能力(Petr Jelinek)

这简化了对象权限的管理,并使为应用数据安全利用数据库角色更加容易。

新功能新增 ALTER DEFAULT PRIVILEGES 命令,用于控制稍后创建的对象的权限

对象操作 / 对象权限

新增 ALTER DEFAULT PRIVILEGES 命令,用于控制稍后创建的对象的权限(Petr Jelinek)

这大幅简化了复杂数据库应用中对象权限的分配。可以为表、视图、序列和函数设置默认权限。默认值可以按模式分配,也可以数据库范围分配。

新功能新增用 GRANT/REVOKE 控制大对象(BLOB)权限的能力

对象操作 / 对象权限

新增用 GRANT/REVOKE 控制大对象(BLOB)权限的能力(KaiGai Kohei)

此前任何数据库用户都可以读取或修改任何大对象。现在可以逐大对象授予和撤销读写权限,并且会跟踪大对象的所有权。

新功能让 LISTEN/NOTIFY 把未决事件存储在内存队列而不是系统表中

工具操作

让 LISTEN/NOTIFY 把未决事件存储在内存队列而不是系统表中(Joachim Wieland)

这大幅改进了性能,同时保留了事务支持和保证送达的现有特性。

新功能允许 NOTIFY 向监听者传递可选的“载荷”字符串

工具操作

允许 NOTIFY 向监听者传递可选的“载荷”字符串(Joachim Wieland)

这大幅提升了 LISTEN/NOTIFY 作为通用事件队列系统的实用性。

新功能允许对所有逐数据库系统目录执行 CLUSTER

工具操作

允许对所有逐数据库系统目录执行 CLUSTER(Tom Lane)

共享目录仍然不能聚簇。

新功能接受 COPY ... CSV FORCE QUOTE *

工具操作 / COPY

接受 COPY ... CSV FORCE QUOTE *(Itagaki Takahiro)

现在 * 可用作 FORCE QUOTE 子句中“所有列”的简写。

新功能新增允许在括号内指定选项的 COPY 语法

工具操作 / COPY

新增允许在括号内指定选项的 COPY 语法(Robert Haas、Emmanuel Cecchet)

这为未来的 COPY 选项提供了更大的灵活性。仍支持旧语法,但只用于既有选项。

新功能允许 EXPLAIN 以 XML、JSON 或 YAML 格式输出

工具操作 / EXPLAIN

允许 EXPLAIN 以 XML、JSON 或 YAML 格式输出(Robert Haas、Greg Sabino Mullane)

新的输出格式易于机器读取,支持开发分析 EXPLAIN 输出的新工具。

新功能新增 BUFFERS 选项,用于在 EXPLAIN ANALYZE 期间报告查询缓冲区使用情况

工具操作 / EXPLAIN

新增 BUFFERS 选项,用于在 EXPLAIN ANALYZE 期间报告查询缓冲区使用情况(Itagaki Takahiro)

这允许对单个查询做更好的分析。缓冲区使用情况不再报告在 log_statement_stats 及相关设置的输出中。

新功能在 EXPLAIN 输出中添加哈希使用信息

工具操作 / EXPLAIN

在 EXPLAIN 输出中添加哈希使用信息(Robert Haas)

新功能新增允许在括号内指定选项的 EXPLAIN 语法

工具操作 / EXPLAIN

新增允许在括号内指定选项的 EXPLAIN 语法(Robert Haas)

这为未来的 EXPLAIN 选项提供了更大的灵活性。仍支持旧语法,但只用于既有选项。

新功能更改 VACUUM FULL,使其重写整个表并重建其索引,而不是移动单个行来压缩空间

工具操作 / VACUUM

更改 VACUUM FULL,使其重写整个表并重建其索引,而不是移动单个行来压缩空间(Itagaki Takahiro、Tom Lane)

以前的方法通常更慢并导致索引膨胀。注意新方法在 VACUUM FULL 期间会暂时使用更多磁盘空间;可能多达表及其索引通常占用空间的两倍。

新功能新增允许在括号内指定选项的 VACUUM 语法

工具操作 / VACUUM

新增允许在括号内指定选项的 VACUUM 语法(Itagaki Takahiro)

这为未来的 VACUUM 选项提供了更大的灵活性。仍支持旧语法,但只用于既有选项。

新功能允许在 CREATE INDEX 中省略索引名以自动命名索引

工具操作 / 索引

允许在 CREATE INDEX 中省略索引名以自动命名索引(Tom Lane)

新功能默认情况下,多列索引现在以所有列命名;索引表达式列现在基于其表达式命名

工具操作 / 索引

默认情况下,多列索引现在以所有列命名;索引表达式列现在基于其表达式命名(Tom Lane)

新功能重建共享系统目录的索引现在完全是事务性且崩溃安全的

工具操作 / 索引

重建共享系统目录的索引现在完全是事务性且崩溃安全的(Tom Lane)

此前,重建共享索引只允许在独立模式下进行,而且操作期间崩溃可能使索引处于比之前更糟的状态。

新功能为 GiST 新增 point_ops 操作符类

工具操作 / 索引

为 GiST 新增 point_ops 操作符类(Teodor Sigaev)

此特性允许对 point 列建立 GiST 索引。该索引可用于多种类型的查询,例如 point <@ polygon(点在多边形内)。这应能使许多 PostGIS 查询更快。

新功能在 GIN 索引创建中使用红黑二叉树

工具操作 / 索引

在 GIN 索引创建中使用红黑二叉树(Teodor Sigaev)

红黑树是自平衡的。这避免了输入以非随机顺序出现时的变慢。

新功能允许 bytea 值以十六进制记法书写

数据类型

允许 bytea 值以十六进制记法书写(Peter Eisentraut)

服务器参数 bytea_output 控制 bytea 输出使用十六进制还是传统格式。Libpq 的 PQescapeByteaConn() 函数在连接 PostgreSQL 9.0 或更新服务器时自动使用十六进制格式。但 9.0 之前的 libpq 版本无法正确处理来自更新服务器的十六进制格式。

新的十六进制格式与更多使用二进制数据的应用直接兼容,使它们无需额外转换即可存储和获取。它的读写也明显快于传统格式。

新功能允许把服务器参数 extra_float_digits 增大到 3

数据类型

允许把服务器参数 extra_float_digits 增大到 3(Tom Lane)

此前 extra_float_digits 的最大设置为 2。有些情况需要 3 位数字才能精确转储和恢复 float4 值。pg_dump 现在在从允许它的服务器转储时将使用设置 3。

新功能收紧对 int2vector 值的输入检查

数据类型

收紧对 int2vector 值的输入检查(Caleb Welton)

新功能在 synonym 词典中新增前缀支持

数据类型 / Full Text Search

在 synonym 词典中新增前缀支持(Teodor Sigaev)

新功能新增过滤词典

数据类型 / Full Text Search

新增过滤词典(Teodor Sigaev)

过滤词典允许先修改词元再传递给后续词典。

新功能允许电子邮件地址词元中包含下划线

数据类型 / Full Text Search

允许电子邮件地址词元中包含下划线(Teodor Sigaev)

新功能使用更符合标准的规则解析 URL 词元

数据类型 / Full Text Search

使用更符合标准的规则解析 URL 词元(Tom Lane)

新功能允许函数调用提供参数名并与函数定义中的命名参数匹配

函数

允许函数调用提供参数名并与函数定义中的命名参数匹配(Pavel Stehule)

例如,如果函数定义为接受参数 a 和 b,则可以用 func(a := 7, b := 12) 或 func(b := 12, a := 7) 调用它。

新功能支持在 UTF-8 服务器编码下进行区域特定的正则表达式处理

函数

支持在 UTF-8 服务器编码下进行区域特定的正则表达式处理(Tom Lane)

区域特定的正则表达式功能包括不区分大小写的匹配和区域特定的字符类。此前,这些特性只有当数据库使用单字节服务器编码(如 LATIN1)时才能对非 ASCII 字符正确工作。在 UTF-8 之外的多字节编码中它们仍会行为不当。

新功能在 to_char() 中新增科学计数法支持(EEEE 规范)

函数

在 to_char() 中新增科学计数法支持(EEEE 规范)(Pavel Stehule、Brendan Jurd)

新功能让 to_char() 在 Y、YY 和 YYY 规范中遵循 FM(填充模式)

函数

让 to_char() 在 Y、YY 和 YYY 规范中遵循 FM(填充模式)(Bruce Momjian、Tom Lane)

YYYY 此前已遵循它。

BUG 修复修复 to_char(),使其在 Windows 上以正确的编码输出本地化的数字和货币字符串

函数

修复 to_char(),使其在 Windows 上以正确的编码输出本地化的数字和货币字符串(Hiroshi Inoue、Itagaki Takahiro、Bruce Momjian)

BUG 修复修正多边形的“重叠”和“包含”运算的计算

函数

修正多边形的“重叠”和“包含”运算的计算(Teodor Sigaev)

多边形 &&(重叠)操作符此前只检查两个多边形的边界框是否重叠。现在它做更正确的检查。多边形 @> 和 <@(包含/被包含)操作符此前检查一个多边形的所有顶点是否都包含在另一个中;这对某些非凸多边形可能错误地报告“真”。现在它们检查一个多边形的所有线段都包含在另一个中。

新功能允许聚合函数使用 ORDER BY

函数 / 聚合

允许聚合函数使用 ORDER BY(Andrew Gierth)

例如,现在支持:array_agg(a ORDER BY b)。这对输入值顺序很重要的聚合很有用,并消除了使用非标准子查询来确定排序的需要。

新功能多参数聚合函数现在可以使用 DISTINCT

函数 / 聚合

多参数聚合函数现在可以使用 DISTINCT(Andrew Gierth)

新功能新增聚合函数 string_agg(),用于把值组合成单个字符串

函数 / 聚合

新增聚合函数 string_agg(),用于把值组合成单个字符串(Pavel Stehule)

新功能如果聚合转换函数未标记为 STRICT,以 DISTINCT 调用的聚合函数现在会被传递 NULL 值

函数 / 聚合

如果聚合转换函数未标记为 STRICT,以 DISTINCT 调用的聚合函数现在会被传递 NULL 值(Andrew Gierth)

例如,agg(DISTINCT x) 可能会把 NULL 的 x 值传递给 agg()。这与非 DISTINCT 情况下的行为更一致。

新功能为 bit 字符串新增 get_bit() 和 set_bit() 函数,与 bytea 的对应函数保持一致

函数 / 位串

为 bit 字符串新增 get_bit() 和 set_bit() 函数,与 bytea 的对应函数保持一致(Leonardo F)

新功能为 bit 字符串和 bytea 实现 OVERLAY()(替换)

函数 / 位串

为 bit 字符串和 bytea 实现 OVERLAY()(替换)(Leonardo F)

新功能新增 pg_table_size() 和 pg_indexes_size(),为 pg_relation_size() 函数提供更用户友好的接口

函数 / 对象信息函数

新增 pg_table_size() 和 pg_indexes_size(),为 pg_relation_size() 函数提供更用户友好的接口(Bernd Helmle)

新功能新增用于序列权限检查的 has_sequence_privilege()

函数 / 对象信息函数

新增用于序列权限检查的 has_sequence_privilege()(Abhijit Menon-Sen)

新功能更新 information_schema 视图以符合 SQL:2008

函数 / 对象信息函数

更新 information_schema 视图以符合 SQL:2008(Peter Eisentraut)

新功能让 information_schema 视图正确显示 char 和 varchar 列的最大八位字节长度

函数 / 对象信息函数

让 information_schema 视图正确显示 char 和 varchar 列的最大八位字节长度(Peter Eisentraut)

性能改进加速 information_schema 权限视图

函数 / 对象信息函数

加速 information_schema 权限视图(Joachim Wieland)

新功能支持使用 DO 语句执行匿名代码块

函数 / 函数和触发器创建

支持使用 DO 语句执行匿名代码块(Petr Jelinek、Joshua Tolley、Hannu Valtonen)

这允许执行服务器端代码而无需创建和删除临时函数定义。可以用用户有权定义函数的任何语言执行代码。

新功能实现符合 SQL 标准的逐列触发器

函数 / 函数和触发器创建

实现符合 SQL 标准的逐列触发器(Itagaki Takahiro)

这类触发器只在指定列受查询影响(例如出现在 UPDATE 的 SET 列表中)时触发。

新功能为 CREATE TRIGGER 新增 WHEN 子句,允许控制触发器是否触发

函数 / 函数和触发器创建

为 CREATE TRIGGER 新增 WHEN 子句,允许控制触发器是否触发(Itagaki Takahiro)

虽然同类检查总是可以在触发器内部执行,但在外部 WHEN 子句中执行可能有性能收益。

新功能为 CREATE LANGUAGE 新增 OR REPLACE 子句

服务器端语言

为 CREATE LANGUAGE 新增 OR REPLACE 子句(Tom Lane)

这有助于在语言尚不存在时选择性地安装它,而且在 PL/pgSQL 默认安装的现在特别有用。

新功能默认安装 PL/pgSQL

服务器端语言 / PL/pgSQL Server-Side Language

默认安装 PL/pgSQL(Bruce Momjian)

如果管理员对其可用性有安全或性能方面的顾虑,仍可以把它从特定数据库中移除。

新功能改进对 PL/pgSQL 变量名与函数内查询所用标识符冲突情况的处理

服务器端语言 / PL/pgSQL Server-Side Language

改进对 PL/pgSQL 变量名与函数内查询所用标识符冲突情况的处理(Tom Lane)

现在的默认行为是在存在冲突时抛出错误,以避免令人惊讶的行为。可以通过配置参数 plpgsql.variable_conflict 或逐函数选项 #variable_conflict 修改它,允许使用变量或查询提供的列。无论如何,PL/pgSQL 不再尝试在语法上无效的位置替换变量。

新功能让 PL/pgSQL 使用主词法分析器而不是自己的版本

服务器端语言 / PL/pgSQL Server-Side Language

让 PL/pgSQL 使用主词法分析器而不是自己的版本(Tom Lane)

这确保了对主系统行为(如字符串转义等细节)的准确跟踪。一些用户可见的细节(例如 PL/pgSQL 中被视为保留的关键字集合)因此而改变。

新功能避免对无效的记录引用抛出不必要的错误

服务器端语言 / PL/pgSQL Server-Side Language

避免对无效的记录引用抛出不必要的错误(Tom Lane)

现在只有当引用实际被获取时才抛出错误,而不是在到达外层表达式时就抛出。例如,许多人曾在触发器中尝试这样做:

 if TG_OP = 'INSERT' and NEW.col1 = ... then 

这现在将按预期工作。

新功能改进 PL/pgSQL 处理带已删除列的行类型的能力

服务器端语言 / PL/pgSQL Server-Side Language

改进 PL/pgSQL 处理带已删除列的行类型的能力(Pavel Stehule)

新功能允许在 PL/pgSQL 函数内为输入参数赋值

服务器端语言 / PL/pgSQL Server-Side Language

允许在 PL/pgSQL 函数内为输入参数赋值(Steve Prentice)

此前输入参数被视为声明为 CONST,因此函数代码不能更改它们的值。此限制已被移除,以简化从没有等效限制的其他 DBMS 移植函数。输入参数现在就像初始化为传入值的局部变量。

新功能改进 PL/pgSQL 的错误位置报告

服务器端语言 / PL/pgSQL Server-Side Language

改进 PL/pgSQL 的错误位置报告(Tom Lane)

新功能为 PL/pgSQL 的 MOVE FORWARD/BACKWARD 新增 count 和 ALL 选项

服务器端语言 / PL/pgSQL Server-Side Language

为 PL/pgSQL 的 MOVE FORWARD/BACKWARD 新增 count 和 ALL 选项(Pavel Stehule)

新功能允许 PL/pgSQL 的 WHERE CURRENT OF 使用游标变量

服务器端语言 / PL/pgSQL Server-Side Language

允许 PL/pgSQL 的 WHERE CURRENT OF 使用游标变量(Tom Lane)

新功能允许 PL/pgSQL 的 OPEN cursor FOR EXECUTE 使用参数

服务器端语言 / PL/pgSQL Server-Side Language

允许 PL/pgSQL 的 OPEN cursor FOR EXECUTE 使用参数(Pavel Stehule、Itagaki Takahiro)

这通过新的 USING 子句实现。

新功能新增 PL/Perl 函数:quote_literal()、quote_nullable()、quote_ident()、encode_bytea()、decode_bytea()、looks_like_number()、encode_array_literal()、encode_array_constructor()

服务器端语言 / PL/Perl Server-Side Language

新增 PL/Perl 函数:quote_literal()、quote_nullable()、quote_ident()、encode_bytea()、decode_bytea()、looks_like_number()、encode_array_literal()、encode_array_constructor()(Tim Bunce)

新功能新增服务器参数 plperl.on_init,用于指定 PL/Perl 初始化函数

服务器端语言 / PL/Perl Server-Side Language

新增服务器参数 plperl.on_init,用于指定 PL/Perl 初始化函数(Tim Bunce)

还提供 plperl.on_plperl_init 和 plperl.on_plperlu_init,分别用于可信或不可信语言的特定初始化。

新功能支持 PL/Perl 中的 END 块

服务器端语言 / PL/Perl Server-Side Language

支持 PL/Perl 中的 END 块(Tim Bunce)

END 块目前不允许数据库访问。

新功能允许 PL/Perl 中使用 use strict

服务器端语言 / PL/Perl Server-Side Language

允许 PL/Perl 中使用 use strict(Tim Bunce)

Perl strict 检查还可以通过新的服务器参数 plperl.use_strict 全局启用。

新功能允许 PL/Perl 中使用 require

服务器端语言 / PL/Perl Server-Side Language

允许 PL/Perl 中使用 require(Tim Bunce)

它基本上是测试模块是否已加载,如果没有则生成错误。它不允许加载管理员未通过初始化参数预加载的模块。

新功能如果使用 Perl 5.10 或更高版本,允许 PL/Perl 中使用 use feature

服务器端语言 / PL/Perl Server-Side Language

如果使用 Perl 5.10 或更高版本,允许 PL/Perl 中使用 use feature(Tim Bunce)

新功能验证 PL/Perl 返回值在服务器编码中有效

服务器端语言 / PL/Perl Server-Side Language

验证 PL/Perl 返回值在服务器编码中有效(Andrew Dunstan)

新功能在 PL/Python 中新增 Unicode 支持

服务器端语言 / PL/Python Server-Side Language

在 PL/Python 中新增 Unicode 支持(Peter Eisentraut)

字符串会根据需要自动与服务器编码相互转换。

新功能改进 PL/Python 的 bytea 支持

服务器端语言 / PL/Python Server-Side Language

改进 PL/Python 的 bytea 支持(Caleb Welton)

传入 PL/Python 的 bytea 值现在表示为二进制而不是 PostgreSQL 的 bytea 文本格式。包含空字节的 bytea 值现在也能从 PL/Python 正确输出。布尔、整数和浮点值的传递也得到了改进。

新功能支持在 PL/Python 中使用数组作为参数和返回值

服务器端语言 / PL/Python Server-Side Language

支持在 PL/Python 中使用数组作为参数和返回值(Peter Eisentraut)

新功能改进 SQL 域到 Python 类型的映射

服务器端语言 / PL/Python Server-Side Language

改进 SQL 域到 Python 类型的映射(Peter Eisentraut)

新功能为 PL/Python 新增 Python 3 支持

服务器端语言 / PL/Python Server-Side Language

为 PL/Python 新增 Python 3 支持(Peter Eisentraut)

新的服务器端语言名为 plpython3u。它不能与 Python 2 服务器端语言在同一会话中使用。

新功能改进 PL/Python 的错误位置和异常报告

服务器端语言 / PL/Python Server-Side Language

改进 PL/Python 的错误位置和异常报告(Peter Eisentraut)

新功能为 vacuumdb 新增 --analyze-only 选项,只分析不清理

客户端应用程序

为 vacuumdb 新增 --analyze-only 选项,只分析不清理(Bruce Momjian)

新功能新增对 psql 变量值作为 SQL 字符串或标识符加引号/转义的支持

客户端应用程序 / psql

新增对 psql 变量值作为 SQL 字符串或标识符加引号/转义的支持(Pavel Stehule、Robert Haas)

例如,:'var' 会产生加了引号并正确转义为字面字符串的 var 值,而 :"var" 会产生加了引号并转义为标识符的值。

新功能让 psql 忽略其读取的脚本文件中前导的 UTF-8 编码 Unicode 字节顺序标记

客户端应用程序 / psql

让 psql 忽略其读取的脚本文件中前导的 UTF-8 编码 Unicode 字节顺序标记(Itagaki Takahiro)

这在客户端编码为 UTF-8 时启用。它改进了与某些(主要在 Windows 上)坚持插入此类标记的编辑器的兼容性。

BUG 修复修复 psql --file -,使其正确遵循 --single-transaction

客户端应用程序 / psql

修复 psql --file -,使其正确遵循 --single-transaction(Bruce Momjian)

新功能避免两个 psql 会话并发运行时 psql 的命令行历史相互覆盖

客户端应用程序 / psql

避免两个 psql 会话并发运行时 psql 的命令行历史相互覆盖(Tom Lane)

新功能改进 psql 的 Tab 补全支持

客户端应用程序 / psql

改进 psql 的 Tab 补全支持(Itagaki Takahiro)

新功能只要启用了 \timing 就显示其输出,无论是否处于“安静”模式

客户端应用程序 / psql

只要启用了 \timing 就显示其输出,无论是否处于“安静”模式(Peter Eisentraut)

新功能改进 psql 中换行列的显示

客户端应用程序 / psql / psql Display

改进 psql 中换行列的显示(Roger Leigh)

此行为现在是默认。以前的格式可以通过 \pset linestyle old-ascii 使用。

新功能允许 psql 通过 \pset linestyle unicode 使用精致的 Unicode 画线字符

客户端应用程序 / psql / psql Display

允许 psql 通过 \pset linestyle unicode 使用精致的 Unicode 画线字符(Roger Leigh)

新功能让 \d 显示继承自指定父表的子表

客户端应用程序 / psql / psql \d Commands

让 \d 显示继承自指定父表的子表(Damien Clochard)

\d 只显示子表数量,而 \d+ 显示所有子表的名称。

新功能在 \d index_name 中显示索引列的定义

客户端应用程序 / psql / psql \d Commands

在 \d index_name 中显示索引列的定义(Khee Chin)

该定义对表达式索引很有用。

新功能只在 \d+ 而不是 \d 中显示视图的定义查询

客户端应用程序 / psql / psql \d Commands

只在 \d+ 而不是 \d 中显示视图的定义查询(Peter Eisentraut)

始终包含查询被认为过于冗长。

新功能让 pg_dump/pg_restore 的 --clean 也移除大对象

客户端应用程序 / pg_dump

让 pg_dump/pg_restore 的 --clean 也移除大对象(Itagaki Takahiro)

BUG 修复修复 pg_dump,使其在启用 standard_conforming_strings 时正确转储大对象

客户端应用程序 / pg_dump

修复 pg_dump,使其在启用 standard_conforming_strings 时正确转储大对象(Tom Lane)

以前的编码在转储到归档文件再由 pg_restore 生成脚本输出时可能失败。

新功能pg_restore 现在在生成脚本输出时以十六进制格式发出大对象数据

客户端应用程序 / pg_dump

pg_restore 现在在生成脚本输出时以十六进制格式发出大对象数据(Tom Lane)

如果脚本随后被加载到 9.0 之前的服务器,这可能导致兼容性问题。解决办法是改为直接恢复到服务器。

新功能允许 pg_dump 转储附加在组合类型列上的注释(Taro Minowa (Higepon))

客户端应用程序 / pg_dump

允许 pg_dump 转储附加在组合类型列上的注释(Taro Minowa (Higepon))

新功能让 pg_dump --verbose 在文本输出模式下输出 pg_dump 和服务器版本

客户端应用程序 / pg_dump

让 pg_dump --verbose 在文本输出模式下输出 pg_dump 和服务器版本(Jim Cox、Tom Lane)

这些在自定义输出模式下早已提供。

新功能pg_restore 现在会在开关和可选文件名之后还有命令行参数时抱怨

客户端应用程序 / pg_dump

pg_restore 现在会在开关和可选文件名之后还有命令行参数时抱怨(Tom Lane)

此前它会静默忽略任何这类参数。

新功能允许在系统重启期间安全地用 pg_ctl 启动 postmaster

客户端应用程序 / pg_ctl

允许在系统重启期间安全地用 pg_ctl 启动 postmaster(Tom Lane)

此前,pg_ctl 的父进程可能基于过期的 postmaster 锁文件被误识别为运行中的 postmaster,导致数据库瞬时启动失败。

新功能赋予 pg_ctl 初始化数据库的能力(通过调用 initdb)

客户端应用程序 / pg_ctl

赋予 pg_ctl 初始化数据库的能力(通过调用 initdb)(Zdenek Kotala)

新功能新增 libpq 函数 PQconnectdbParams() 和 PQconnectStartParams()

Development Tools / libpq

新增 libpq 函数 PQconnectdbParams() 和 PQconnectStartParams()(Guillaume Lelarge)

这些函数类似于 PQconnectdb() 和 PQconnectStart(),只是它们接受以空结尾的连接选项数组,而不是要求在单个字符串中提供所有选项。

新功能新增 libpq 函数 PQescapeLiteral() 和 PQescapeIdentifier()

Development Tools / libpq

新增 libpq 函数 PQescapeLiteral() 和 PQescapeIdentifier()(Robert Haas)

这些函数返回适当加引号和转义的 SQL 字符串字面量和标识符。调用者不需要像 PQescapeStringConn() 那样预分配字符串结果。

新功能新增对每用户服务文件(.pg_service.conf)的支持,它在全站服务文件之前检查

Development Tools / libpq

新增对每用户服务文件(.pg_service.conf)的支持,它在全站服务文件之前检查(Peter Eisentraut)

新功能如果找不到指定的 libpq 服务则正确报告错误

Development Tools / libpq

如果找不到指定的 libpq 服务则正确报告错误(Peter Eisentraut)

新功能在 libpq 中新增 TCP keepalive 设置

Development Tools / libpq

在 libpq 中新增 TCP keepalive 设置(Tollef Fog Heen、Fujii Masao、Robert Haas)

TCP 连接的服务器端此前已支持 keepalive 设置。

新功能在提供替代方法的平台上,避免 libpq 中为阻塞和取消阻塞 SIGPIPE 而进行的额外系统调用

Development Tools / libpq

在提供替代方法的平台上,避免 libpq 中为阻塞和取消阻塞 SIGPIPE 而进行的额外系统调用(Jeremy Kerr)

新功能当 .pgpass 提供的口令失败时,在错误消息中说明口令来源

Development Tools / libpq

当 .pgpass 提供的口令失败时,在错误消息中说明口令来源(Bruce Momjian)

新功能加载客户端证书文件中给出的所有 SSL 证书

Development Tools / libpq

加载客户端证书文件中给出的所有 SSL 证书(Tom Lane)

这改进了对间接签名 SSL 证书的支持。

新功能为 ecpg 新增 SQLDA(SQL 描述符区域)支持

Development Tools / ecpg

为 ecpg 新增 SQLDA(SQL 描述符区域)支持(Boszormenyi Zoltan)

新功能为 ecpg 新增 DESCRIBE [ OUTPUT ] 语句

Development Tools / ecpg

为 ecpg 新增 DESCRIBE [ OUTPUT ] 语句(Boszormenyi Zoltan)

新功能新增返回当前事务状态的 ECPGtransactionStatus 函数

Development Tools / ecpg

新增返回当前事务状态的 ECPGtransactionStatus 函数(Bernd Helmle)

新功能在 ecpg Informix 兼容模式中新增 string 数据类型

Development Tools / ecpg

在 ecpg Informix 兼容模式中新增 string 数据类型(Boszormenyi Zoltan)

新功能允许 ecpg 无限制地使用 new 和 old 变量名

Development Tools / ecpg

允许 ecpg 无限制地使用 new 和 old 变量名(Michael Meskes)

新功能允许 ecpg 在 free() 中使用变量名

Development Tools / ecpg

允许 ecpg 在 free() 中使用变量名(Michael Meskes)

新功能让 ecpg_dynamic_type() 对非 SQL3 数据类型返回零

Development Tools / ecpg

让 ecpg_dynamic_type() 对非 SQL3 数据类型返回零(Michael Meskes)

此前它返回数据类型 OID 的负值。但这可能与有效的类型 OID 混淆。

新功能在已有 64 位 long 的平台上支持 long long 类型

Development Tools / ecpg

在已有 64 位 long 的平台上支持 long long 类型(Michael Meskes)

新功能在 ecpg 的本机模式中新增范围外游标支持

Development Tools / ecpg / ecpg Cursors

在 ecpg 的本机模式中新增范围外游标支持(Boszormenyi Zoltan)

这允许 DECLARE 使用 OPEN 被调用时不在作用域内的变量。此机制在 ecpg 的 Informix 兼容模式中早已存在。

新功能允许 ecpg 中的动态游标名

Development Tools / ecpg / ecpg Cursors

允许 ecpg 中的动态游标名(Boszormenyi Zoltan)

新功能允许 ecpg 在 FETCH 和 MOVE 中使用噪声词 FROM 和 IN

Development Tools / ecpg / ecpg Cursors

允许 ecpg 在 FETCH 和 MOVE 中使用噪声词 FROM 和 IN(Boszormenyi Zoltan)

新功能默认启用客户端线程安全

构建选项

默认启用客户端线程安全(Bruce Momjian)

线程安全选项可以用 configure --disable-thread-safety 禁用。

新功能新增对控制 Linux 内存不足终止器的支持

构建选项

新增对控制 Linux 内存不足终止器的支持(Alex Hunsaker、Tom Lane)

既然 /proc/self/oom_adj 允许禁用 Linux 内存不足(OOM)终止器,建议对 postmaster 禁用 OOM 终止。之后可能希望对 postmaster 的子进程重新启用 OOM 终止。新的编译期选项 LINUX_OOM_ADJ 允许对子进程重新激活终止器。

新功能新的 Makefile 目标 world、install-world 和 installcheck-world

构建选项 / Makefile

新的 Makefile 目标 world、install-world 和 installcheck-world(Andrew Dunstan)

它们类似于现有的 all、install 和 installcheck 目标,但它们还构建 HTML 文档、构建并测试 contrib,并测试服务器端语言和 ecpg。

新功能为 PGXS Makefile 新增数据和文档安装位置控制

构建选项 / Makefile

为 PGXS Makefile 新增数据和文档安装位置控制(Mark Cave-Ayland)

新功能新增 Makefile 规则,把 PostgreSQL 文档构建为单个 HTML 文件或单个纯文本文件

构建选项 / Makefile

新增 Makefile 规则,把 PostgreSQL 文档构建为单个 HTML 文件或单个纯文本文件(Peter Eisentraut、Bruce Momjian)

新功能支持在 64 位 Windows 上编译并以 64 位模式运行

构建选项 / Windows

支持在 64 位 Windows 上编译并以 64 位模式运行(Tsutomu Yamada、Magnus Hagander)

这允许在 Windows 上使用大型共享内存。

新功能支持使用 Visual Studio 2008 构建服务器

构建选项 / Windows

支持使用 Visual Studio 2008 构建服务器(Magnus Hagander)

新功能以子目录树而非发行版压缩包内的 tar 归档文件的形式分发预构建文档

源代码

以子目录树而非发行版压缩包内的 tar 归档文件的形式分发预构建文档(Peter Eisentraut)

例如,预构建的 HTML 文档现在位于 doc/src/sgml/html/;手册页的打包方式类似。

新功能使服务器词法分析器可重入

源代码

使服务器词法分析器可重入(Tom Lane)

这是 PL/pgSQL 使用该词法分析器所需要的。

新功能改进内存分配的速度

源代码

改进内存分配的速度(Tom Lane、Greg Stark)

新功能用户定义的约束触发器现在在 pg_constraint 和 pg_trigger 中都有条目

源代码

用户定义的约束触发器现在在 pg_constraint 和 pg_trigger 中都有条目(Tom Lane)

由于此变更,pg_constraint.pgconstrname 现在是冗余的,已被移除。

新功能新增系统目录列 pg_constraint.conindid 和 pg_trigger.tgconstrindid,以更好地记录约束强制执行中索引的使用

源代码

新增系统目录列 pg_constraint.conindid 和 pg_trigger.tgconstrindid,以更好地记录约束强制执行中索引的使用(Tom Lane)

新功能允许使用单个操作系统信号向后台进程传达多个条件

源代码

允许使用单个操作系统信号向后台进程传达多个条件(Fujii Masao)

这允许新增特性而不受平台特定的信号条件数量限制。

新功能改进源代码测试覆盖率,包括 contrib、PL/Python 和 PL/Perl

源代码

改进源代码测试覆盖率,包括 contrib、PL/Python 和 PL/Perl(Peter Eisentraut、Andrew Dunstan)

新功能移除系统表引导时对平面文件的使用

源代码

移除系统表引导时对平面文件的使用(Tom Lane、Alvaro Herrera)

这改进了使用大量角色或数据库时的性能,并消除了一些可能的失败条件。

新功能自动为“引导”目录生成 pg_attribute 的初始内容

源代码

自动为“引导”目录生成 pg_attribute 的初始内容(John Naylor)

这大幅简化了对这些目录的更改。

新功能把 INSERT/UPDATE/DELETE 操作的处理从 execMain.c 中拆分出来

源代码

把 INSERT/UPDATE/DELETE 操作的处理从 execMain.c 中拆分出来(Marko Tiikkaja)

更新现在在单独的 ModifyTable 节点中执行。此变更是未来改进的必要基础设施。

新功能简化 psql SQL 帮助文本的翻译

源代码

简化 psql SQL 帮助文本的翻译(Peter Eisentraut)

新功能缩短某些文件名的长度,使发行版压缩包中所有文件路径都少于 100 个字符

源代码

缩短某些文件名的长度,使发行版压缩包中所有文件路径都少于 100 个字符(Tom Lane)

某些解压程序对更长的文件路径有问题。

新功能新增 ERRCODE_INVALID_PASSWORD SQLSTATE 错误码

源代码

新增 ERRCODE_INVALID_PASSWORD SQLSTATE 错误码(Bruce Momjian)

新功能经作者许可,移除少数剩余的个人源代码版权声明

源代码

经作者许可,移除少数剩余的个人源代码版权声明(Bruce Momjian)

个人版权声明无关紧要,但社区偶尔不得不回答关于它们的问题。

性能改进新增关于以非持久模式运行 PostgreSQL 以改进性能的文档节

源代码

新增关于以非持久模式运行 PostgreSQL 以改进性能的文档节(Bruce Momjian)

新功能重构 HTML 文档 Makefile 规则,使其依赖检查正确工作,避免不必要的重建

源代码

重构 HTML 文档 Makefile 规则,使其依赖检查正确工作,避免不必要的重建(Peter Eisentraut)

新功能使用 DocBook XSL 样式表而非 Docbook2X 构建手册页

源代码

使用 DocBook XSL 样式表而非 Docbook2X 构建手册页(Peter Eisentraut)

这改变了构建手册页所需的工具集。

新功能改进 PL/Perl 代码结构

源代码

改进 PL/Perl 代码结构(Tim Bunce)

新功能改进 PL/Perl 的错误上下文报告

源代码

改进 PL/Perl 的错误上下文报告(Alexey Klyukin)

新功能要求 Autoconf 2.63 来构建 configure

源代码 / 新构建要求

要求 Autoconf 2.63 来构建 configure(Peter Eisentraut)

新功能要求 Flex 2.5.31 或更高版本以从 CVS 检出构建

源代码 / 新构建要求

要求 Flex 2.5.31 或更高版本以从 CVS 检出构建(Tom Lane)

新功能要求 Perl 5.8 或更高版本以从 CVS 检出构建

源代码 / 新构建要求

要求 Perl 5.8 或更高版本以从 CVS 检出构建(John Naylor、Andrew Dunstan)

新功能为 Bonjour 使用更现代的 API

源代码 / 可移植性

为 Bonjour 使用更现代的 API(Tom Lane)

Bonjour 支持现在要求 OS X 10.3 或更高版本。旧 API 已被 Apple 弃用。

新功能新增 SuperH 架构的自旋锁支持

源代码 / 可移植性

新增 SuperH 架构的自旋锁支持(Nobuhiro Iwamatsu)

新功能允许非 GCC 编译器在支持时使用内联函数

源代码 / 可移植性

允许非 GCC 编译器在支持时使用内联函数(Kurt Harriman)

新功能移除对没有可用 64 位整数数据类型的平台的支持

源代码 / 可移植性

移除对没有可用 64 位整数数据类型的平台的支持(Tom Lane)

新功能重构 LDFLAGS 的使用,使其在平台间更一致

源代码 / 可移植性

重构 LDFLAGS 的使用,使其在平台间更一致(Tom Lane)

LDFLAGS 现在用于链接可执行文件和共享库,并且在链接可执行文件时附加 LDFLAGS_EX,链接共享库时附加 LDFLAGS_SL。

新功能使后端头文件可以安全地包含在 C++ 中

源代码 / 服务器编程

使后端头文件可以安全地包含在 C++ 中(Kurt Harriman、Peter Eisentraut)

这些变更移除了此前使 C++ 难以用于后端代码的关键字冲突。但是,在为后端函数使用 C++ 时仍有其他复杂之处。在适当的地方仍需要 extern "C" { },内存管理和错误处理仍是有问题的。

新功能新增 AggCheckCallContext(),用于检测 C 函数是否被作为聚合调用

源代码 / 服务器编程

新增 AggCheckCallContext(),用于检测 C 函数是否被作为聚合调用(Hitoshi Harada)

新功能更改 SearchSysCache() 及相关函数的调用约定,以避免硬编码缓存键的最大数量

源代码 / 服务器编程

更改 SearchSysCache() 及相关函数的调用约定,以避免硬编码缓存键的最大数量(Robert Haas)

现有调用目前仍可工作,但如果不转换为新风格,预计会在 9.1 或更高版本中中断。

新功能要求对 fastgetattr() 和 heap_getattr() 后端宏的调用提供非 NULL 的第四个参数

源代码 / 服务器编程

要求对 fastgetattr() 和 heap_getattr() 后端宏的调用提供非 NULL 的第四个参数(Robert Haas)

新功能自定义 typanalyze 函数不应再依赖 VacAttrStats.attr 来确定将要传递给它们的数据类型

源代码 / 服务器编程

自定义 typanalyze 函数不应再依赖 VacAttrStats.attr 来确定将要传递给它们的数据类型(Tom Lane)

此变更是为了允许对存储类型与底层列数据类型不同的索引列收集统计信息。有新的字段告知实际被分析的数据类型。

新功能新增用于处理 ColumnRef 和 ParamRef 节点的解析器钩子

源代码 / 服务器钩子

新增用于处理 ColumnRef 和 ParamRef 节点的解析器钩子(Tom Lane)

新功能新增 ProcessUtility 钩子,使可加载模块可以控制工具命令

源代码 / 服务器钩子

新增 ProcessUtility 钩子,使可加载模块可以控制工具命令(Itagaki Takahiro)

新功能新增 contrib/pg_upgrade 以支持就地升级

源代码 / 二进制升级支持

新增 contrib/pg_upgrade 以支持就地升级(Bruce Momjian)

这避免了升级到 PostgreSQL 新大版本时转储/重载数据库的要求,从而把停机时间降低了数量级。它支持从 PostgreSQL 8.3 和 8.4 升级到 9.0。

新功能新增在二进制升级期间保留关系 relfilenode 值的支持

源代码 / 二进制升级支持

新增在二进制升级期间保留关系 relfilenode 值的支持(Bruce Momjian)

新功能新增在二进制升级期间保留 pg_type 和 pg_enum OID 的支持

源代码 / 二进制升级支持

新增在二进制升级期间保留 pg_type 和 pg_enum OID 的支持(Bruce Momjian)

新功能把表空间内的数据文件移到 PostgreSQL 版本特定的子目录中

源代码 / 二进制升级支持

把表空间内的数据文件移到 PostgreSQL 版本特定的子目录中(Bruce Momjian)

这简化了二进制升级。

新功能为 contrib/pgbench 新增多线程选项(-j)

附加模块

为 contrib/pgbench 新增多线程选项(-j)(Itagaki Takahiro)

这允许 pgbench 使用多个 CPU,降低 pgbench 本身成为测试瓶颈的风险。

新功能为 contrib/pgbench 新增 \shell 和 \setshell 元命令

附加模块

为 contrib/pgbench 新增 \shell 和 \setshell 元命令(Michael Paquier)

新功能contrib/dict_xsyn 的新特性

附加模块

contrib/dict_xsyn 的新特性(Sergey Karpov)

新选项为 matchorig、matchsynonyms 和 keepsynonyms。

新功能新增全文词典 contrib/unaccent

附加模块

新增全文词典 contrib/unaccent(Teodor Sigaev)

这个过滤词典移除字母上的重音符号,使跨多种语言的全文搜索容易得多。

新功能为 contrib/dblink 新增 dblink_get_notify()

附加模块

为 contrib/dblink 新增 dblink_get_notify()(Marcus Kempe)

这允许 dblink 中的异步通知。

新功能改进 contrib/dblink 对已删除列的处理

附加模块

改进 contrib/dblink 对已删除列的处理(Tom Lane)

这影响 dblink_build_sql_insert() 及相关函数。这些函数现在按逻辑而非物理列编号对列计数。

新功能大幅提高 contrib/hstore 的数据长度限制,并新增 B-tree 和哈希支持,使 hstore 列上可以进行 GROUP BY 和 DISTINCT 操作

附加模块

大幅提高 contrib/hstore 的数据长度限制,并新增 B-tree 和哈希支持,使 hstore 列上可以进行 GROUP BY 和 DISTINCT 操作(Andrew Gierth)

还新增了函数和操作符。这些改进使 hstore 成为嵌入 PostgreSQL 的全功能键值存储。

新功能新增 contrib/passwordcheck,用于支持站点特定的口令强度策略

附加模块

新增 contrib/passwordcheck,用于支持站点特定的口令强度策略(Laurenz Albe)

应修改此模块的源代码以实现站点特定的口令策略。

新功能新增 contrib/pg_archivecleanup 工具

附加模块

新增 contrib/pg_archivecleanup 工具(Simon Riggs)

它设计用于 archive_cleanup_command 服务器参数,用于删除不再需要的归档文件。

新功能在 contrib/auto_explain 输出中添加查询文本

附加模块

在 contrib/auto_explain 输出中添加查询文本(Andrew Dunstan)

新功能为 contrib/pg_stat_statements 新增缓冲区访问计数器

附加模块

为 contrib/pg_stat_statements 新增缓冲区访问计数器(Itagaki Takahiro)

新功能更新 contrib/start-scripts/linux,使其使用 /proc/self/oom_adj 禁用 Linux 内存不足(OOM)终止器

附加模块

更新 contrib/start-scripts/linux,使其使用 /proc/self/oom_adj 禁用 Linux 内存不足(OOM)终止器(Alex Hunsaker、Tom Lane)

这份对比如何生成?

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

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

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

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

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