选择 打开 改范围 完整检索页

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

不受支持的版本: 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.0 已于 2015 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页

E.177. 版本 7.4 #

发行日期

2003-11-17

E.177.1. 概述

此发行版的主要变更:

IN / NOT IN subqueries are now much more efficient

在以前的版本中,IN/NOT IN 子查询通过顺序扫描子查询寻找匹配来与上层查询连接。7.4 的代码使用与普通连接相同的复杂技术,因此快得多。IN 现在通常与等价的 EXISTS 子查询一样快或更快;这颠倒了适用于以前版本的传统观念。

通过使用哈希桶改进了 GROUP BY 处理

在以前的版本中,要分组的行必须先排序。7.4 的代码可以不做排序就完成 GROUP BY,方法是把结果累积到每组一个条目的哈希表中。但如果估计哈希表太大放不进 sort_mem,它仍会使用排序技术。

新的多键哈希连接能力

在以前的版本中,哈希连接只能在单键上发生。此版本允许多列哈希连接。

Queries using the explicit JOIN syntax are now better optimized

以前的版本只按语法隐含的顺序求值使用显式 JOIN 语法的查询。7.4 允许对这些查询做完全优化,即优化器考虑所有可能的连接顺序并选择最高效的。但外连接仍必须遵循声明的顺序。

更快、更强大的正则表达式代码

整个正则表达式模块已被 Henry Spencer 的新版本(最初为 Tcl 编写)取代。该代码大幅改进了性能并支持多种风格的正则表达式。

Function-inlining for simple SQL functions

简单 SQL 函数现在可以通过把其 SQL 包含在主查询中来内联。这通过消除每次调用的开销改进了性能。这意味着简单 SQL 函数现在的行为像宏。

Full support for IPv6 connections and IPv6 address data types

以前的版本只允许 IPv4 连接,IP 数据类型也只支持 IPv4 地址。此版本在这两方面都增加了完整的 IPv6 支持。

Major improvements in SSL performance and reliability

几位非常熟悉 SSL API 的人彻底改造了我们的 SSL 代码,以改进 SSL 密钥协商和错误恢复。

让空闲空间映射高效地重用空索引页面, 以及其他空闲空间管理改进

在以前的版本中,因行被删除而变空的 B-tree 索引页只能被索引值与该页上最初索引的行相似的行重用。在 7.4 中,VACUUM 记录空索引页并允许它们被未来的任何索引行重用。

SQL-standard information schema

信息模式提供了访问数据库中定义的模式对象信息的标准化且稳定的方式。

游标更贴近 SQL 标准

FETCHMOVE 命令已被彻底改造,以更贴近 SQL 标准。

游标可以存在于事务之外

这些游标也称为可保持游标。

New client-to-server protocol

新协议增加了错误码、更多状态信息、更快的启动、对二进制数据传输的更好支持、与 SQL 命令分离的参数值、协议级的预备语句以及从 COPY 失败更干净的恢复。服务器和客户端仍支持较旧的协议。

libpq and ECPG applications are now fully thread-safe

虽然以前的 libpq 版本已支持线程,但此版本通过修复数据库连接启动期间使用的一些非线程安全代码改进了线程安全。必须使用 configure 选项 --enable-thread-safety 才能启用此特性。

New version of full-text indexing

contrib/tsearch2 中提供了新的全文索引套件。

New autovacuum tool

contrib/autovacuum 中的新 autovacuum 工具监控数据库统计表中的 INSERT/UPDATE/DELETE 活动,并在需要时自动清理表。

数组处理得到了改进并被移入服务器核心

数组的许多限制已被移除,数组的行为更像完全受支持的数据类型。

E.177.2. 迁移到版本 7.4

希望从任何以前的版本迁移数据的用户,需要使用 pg_dump 进行转储/恢复。

请注意以下不兼容之处:

  • 服务器端的自动提交设置被移除,并在客户端应用程序和语言中重新实现。服务器端自动提交给想要控制自己自动提交行为的语言和应用程序带来了太多问题,因此自动提交从服务器中移除并酌情添加到各个客户端 API。

  • 此版本中错误消息的措辞发生了实质变化。投入了大量努力使消息更一致、更面向用户。如果你的应用程序试图通过解析错误消息来检测不同的错误条件,强烈建议改用新的错误码机制。

  • 使用显式 JOIN 语法的内连接可能行为不同,因为它们现在得到了更好的优化。

  • 为清晰起见,许多服务器配置参数已被重命名,主要是与日志相关的那些。

  • FETCH 0MOVE 0 现在不做任何事情。在以前的版本中,FETCH 0 会获取所有剩余行,MOVE 0 会移到游标末尾。

  • FETCHMOVE 现在返回实际获取/移动的行数,如果位于游标开头/末尾则返回零。以前的版本会返回传给命令的行数,而不是实际获取或移动的行数。

  • COPY 现在能处理使用回车或回车/换行行尾序列的文件。数据值中不再接受字面回车和换行;请改用 \r\n

  • char(n) 转换为 varchar(n)text 时现在会修剪尾随空格。这本来就是大多数人一直期望的。

  • 数据类型 float(p) 现在用二进制位而不是十进制位度量 p。新行为遵循 SQL 标准。

  • 有歧义的日期值现在必须匹配 datestyle 设置指定的顺序。在以前的版本中,即使 datestyle 指定日在前,10/20/03 的日期规格也会被解释为十月的日期。7.4 将在日期规格对当前 datestyle 设置无效时抛出错误。

  • 函数 oidrandoidsranduserfntest 已被移除。这些函数被认定不再有用。

  • 指定随时间变化的日期/时间值的字符串字面量(如 'now''today')在列默认表达式中不再按预期工作;它们现在使表创建时刻成为默认值,而不是插入时刻。应改用 now()current_timestampcurrent_date 等函数。

    在以前的版本中,有特殊代码使 'now' 之类的字符串在 INSERT 时而不是表创建时被解释,但这一变通没有覆盖所有情形。7.4 版本现在要求用 now()current_timestamp() 等函数正确定义默认值。这些在所有情形下都能工作。

  • 操作符名中不再允许美元符号($)。它可以用作标识符中的非首字符。这是为了改进与其他数据库系统的兼容性,并避免参数占位符($n)紧邻操作符书写时的语法问题。

E.177.3. 变更

下面你将找到 7.4 版本与上一个主版本之间变更的详细说明。

E.177.3.1. 服务器操作变更

  • 允许 IPv6 服务器连接(Nigel Kukard、Johan Jordaan、Bruce、Tom、Kurt Roeckx、Andrew Dunstan)

  • 修复 SSL 以干净地处理错误(Nathan Mueller)

    在以前的版本中,某些 SSL API 错误报告未被正确处理。此版本修复了这些问题。

  • SSL 协议安全和性能改进(Sean Chittenden)

    SSL 密钥重协商过于频繁,导致 SSL 性能不佳。此外,初始密钥处理也得到了改进。

  • 检测到死锁时打印锁信息(Tom)

    这使调试死锁情形更容易。

  • 定期更新 /tmp 套接字的修改时间以避免它们被删除(Tom)

    这应有助于防止清理 /tmp 目录的管理脚本删除服务器套接字文件。

  • 为 Mac OS X 启用 PAM(Aaron Hillegass)

  • 使 B-tree 索引完全 WAL 安全(Tom)

    在以前的版本中,某些罕见情形下服务器崩溃可能导致 B-tree 索引损坏。此版本消除了最后几个罕见情形。

  • 允许 B-tree 索引压缩和空页重用(Tom)

  • 修复首个根页分裂期间索引查找不一致的问题(Tom)

    在以前的版本中,当单页索引分裂为两页时,有一小段时间另一个数据库会话可能看不到某个索引条目。此版本修复了这一罕见失败情形。

  • 改进空闲空间映射的分配逻辑(Tom)

  • 在服务器重启之间保留空闲空间信息(Tom)

    在以前的版本中,postmaster 停止时空闲空间映射不被保存,因此新启动的服务器没有空闲空间信息。此版本保存空闲空间映射,并在服务器重启时重新装载它。

  • pg_stat_activity 添加开始时间(Neil)

  • 检测损坏磁盘页的新代码;用 zero_damaged_pages 清除(Tom)

  • 新的客户端/服务器协议:更快、无用户名长度限制、允许从 COPY 干净退出(Tom)

  • 为客户端/服务器协议添加事务状态、表 ID、列 ID(Tom)

  • 为客户端/服务器协议添加二进制 I/O(Tom)

  • 移除服务器端自动提交设置;移至客户端应用程序(Tom)

  • 新的错误消息措辞、错误码和三级错误细节(Tom、Joe、Peter)

E.177.3.2. 性能改进

  • GROUP BY 聚合添加哈希(Tom)

  • 使嵌套循环连接更聪明地使用多列索引(Tom)

  • 允许多键哈希连接(Tom)

  • 改进常量折叠(Tom)

  • 新增内联简单 SQL 函数的能力(Tom)

  • 降低使用复杂函数的查询的内存使用(Tom)

    在以前的版本中,返回已分配内存的函数直到查询完成才释放它。此版本允许在函数调用完成时释放函数分配的内存,减少了函数使用的总内存。

  • 改进 GEQO 优化器性能(Tom)

    此版本修复了 GEQO 优化器管理潜在查询路径方式中的几个低效之处。

  • 允许 IN/NOT IN 通过哈希表处理(Tom)

  • 改进 NOT IN (subquery) 的性能(Tom)

  • 允许大多数 IN 子查询作为连接处理(Tom)

  • 模式匹配操作可以使用索引而不受区域设置影响(Peter)

    非 ASCII 区域设置无法使用标准索引做 LIKE 比较。此版本增加了一种为 LIKE 创建特殊索引的方法。

  • 允许 postmaster 用 preload_libraries 预装载库(Joe)

    对于需要很长时间装载的共享库,此选项使库可以在 postmaster 中预装载并被所有数据库会话继承。

  • 改进优化器代价计算,特别是对子查询(Tom)

  • 当子查询 ORDER BY 与上层查询匹配时避免排序(Tom)

  • WHERE a.x = b.y AND b.y = 42 推出 a.x = 42(Tom)

  • 允许复杂连接上的哈希/归并连接(Tom)

  • 允许更多数据类型的哈希连接(Tom)

  • 允许显式内连接的连接优化,可用 join_collapse_limit 禁用(Tom)

  • 新增参数 from_collapse_limit,控制子查询到连接的转换(Tom)

  • 使用来自 Tcl 的更快更强大的正则表达式代码(Henry Spencer、Tom)

  • 在优化器中使用位图关系集(Tom)

  • 改进连接启动时间(Tom)

    新的客户端/服务器协议启动数据库会话需要更少的网络包。

  • 改进触发器/约束的性能(Stephan)

  • 改进 col IN (const, const, const, ...) 的速度(Tom)

  • 修复罕见情形下损坏的哈希索引(Tom)

  • 改进哈希索引的并发和速度(Tom)

    以前的版本哈希索引性能不佳,特别是在高并发情形下。此版本修复了这一点,开发组有兴趣了解比较 B-tree 与哈希索引性能的报告。

  • 把共享缓冲区对齐到 32 字节边界以改进复制速度(Manfred Spraul)

    某些 CPU 在地址按 32 字节对齐时执行更快的数据复制。

  • 为更好的性能重新实现了 numeric 数据类型(Tom)

    numeric 以前以 100 为基数存储。新代码使用 10000 为基数,性能显著提升。

E.177.3.3. 服务器配置变更

  • 把服务器参数 server_min_messages 改名为 log_min_messages(Bruce)

    这是为了使大多数控制服务器日志的参数以 log_ 开头。

  • show_*_stats 改名为 log_*_stats(Bruce)

  • show_source_port 改名为 log_source_port(Bruce)

  • hostname_lookup 改名为 log_hostname(Bruce)

  • 新增 checkpoint_warning,对过度检查点发出警告(Bruce)

    在以前的版本中,很难确定检查点是否发生得过于频繁。此特性在过度检查点发生时向服务器日志添加警告。

  • 新的本地化只读服务器参数(Tom)

  • 把调试服务器日志消息改为以 DEBUG 而不是 LOG 输出(Bruce)

  • 防止服务器日志变量被非超级用户关闭(Bruce)

    这是一个安全特性,使非超级用户不能禁用管理员启用的日志。

  • log_min_messages/client_min_messages 现在控制 debug_* 输出(Bruce)

    这集中了客户端调试信息,使所有调试输出都可以发送到客户端或服务器日志。

  • 新增 Mac OS X Rendezvous 服务器支持(Chris Campbell)

    这允许 Mac OS X 主机向网络查询可用的 PostgreSQL 服务器。

  • 新增用 log_min_duration_statement 只打印慢语句的能力(Christopher)

    这是常被要求的调试特性,允许管理员在服务器日志中只看到慢查询。

  • 允许 pg_hba.conf 接受 CIDR 格式的网络掩码(Andrew Dunstan)

    这允许管理员把主机 IP 地址和网络掩码字段合并为 pg_hba.conf 中的单个 CIDR 字段。

  • 新的只读参数 is_superuser(Tom)

  • 新参数 log_error_verbosity,控制错误细节(Tom)

    它与新的错误报告特性一起工作,提供提示、文件名和行号等额外错误信息。

  • postgres --describe-config 现在转储服务器配置变量(Aizaz Ahmed、Peter)

    此选项对需要知道配置变量名及其最小值、最大值、默认值和描述的管理工具很有用。

  • pg_settings 新增列:contexttypesourcemin_valmax_val(Joe)

  • 如果可能,把默认 shared_buffers 设为 1000、max_connections 设为 100(Tom)

    以前的版本默认 64 个共享缓冲区,以便 PostgreSQL 甚至能在很老的系统上启动。此版本测试平台允许的共享内存量并在可能时选择更合理的默认值。当然,仍鼓励用户评估其资源负载并相应地设定 shared_buffers 的大小。

  • 新的 pg_hba.conf 记录类型 hostnossl,阻止 SSL 连接(Jon Jensen)

    在以前的版本中,如果客户端和服务器都支持 SSL,就没有办法阻止 SSL 连接。此选项提供了该能力。

  • 移除参数 geqo_random_seed(Tom)

  • 新增服务器参数 regex_flavor,控制正则表达式处理(Tom)

  • pg_ctl 更好地处理非标准端口(Greg)

E.177.3.4. 查询变更

  • 新的 SQL 标准信息模式(Peter)

  • 新增只读事务(Peter)

  • 在外键违反消息中打印键名和值(Dmitry Tkach)

  • 允许用户在 pg_stat_activity 中看到自己的查询(Kevin Brown)

    在以前的版本中,只有超级用户能用 pg_stat_activity 看到查询字符串。现在普通用户可以看到自己的查询字符串。

  • 修复子查询中的聚合以符合 SQL 标准(Tom)

    SQL 标准规定,如果嵌套子查询中出现的聚合函数的参数只包含外层查询变量,则它属于外层查询。以前的 PostgreSQL 版本没有正确处理这个细节。

  • 新增阻止自动添加查询中引用的表的选项(Nigel J. Andrews)

    默认情况下,查询中提到的表如果不在 FROM 子句中会被自动添加到其中。这与历史 POSTGRES 行为兼容但违背 SQL 标准。此选项允许选择标准兼容的行为。

  • 允许 UPDATE ... SET col = DEFAULT(Rod)

    这允许 UPDATE 把列设为其声明的默认值。

  • 允许在 LIMIT/OFFSET 中使用表达式(Tom)

    在以前的版本中,LIMIT/OFFSET 只能使用常数,不能用表达式。

  • 实现 CREATE TABLE AS EXECUTE(Neil、Peter)

E.177.3.5. 对象操作变更

  • 使 CREATE SEQUENCE 语法更符合 SQL:2003(Neil)

  • 新增语句级触发器(Neil)

    虽然这允许触发器在语句结束时触发,但不允许触发器访问该语句修改的所有行。此能力计划在未来版本中提供。

  • 为域新增检查约束(Rod)

    这通过允许域使用检查约束大幅提高了域的用处。

  • 新增 ALTER DOMAIN(Rod)

    这允许操纵现有域。

  • 修复几个零列表缺陷(Tom)

    PostgreSQL 支持零列表。这修复了使用此类表时发生的各种缺陷。

  • ALTER TABLE ... ADD PRIMARY KEY 添加非空约束(Rod)

    在以前的版本中,ALTER TABLE ... ADD PRIMARY 会添加唯一索引但不添加非空约束。此版本修复了这一点。

  • 新增 ALTER TABLE ... WITHOUT OIDS(Rod)

    这允许控制新行和更新的行是否有 OID 列。这对节省存储空间最有用。

  • 新增 ALTER SEQUENCE,修改最小值、最大值、增量、缓存、循环值(Rod)

  • 新增 ALTER TABLE ... CLUSTER ON(Alvaro Herrera)

    此命令被 pg_dump 用来记录每个先前聚簇过的表的聚簇列。该信息被数据库范围的 cluster 用来聚簇所有先前聚簇过的表。

  • 改进域的自动类型转换(Rod、Tom)

  • 允许标识符中的美元符号,但不能作为首字符(Tom)

  • 不允许操作符名中的美元符号,使 x=$1 可行(Tom)

  • 允许用 LIKE subtable 复制表模式,还有 SQL:2003 特性 INCLUDING DEFAULTS(Rod)

  • GRANT 新增 WITH GRANT OPTION 子句(Peter)

    这使 GRANT 能授予其他用户在对象上授予权限的能力。

E.177.3.6. 工具命令变更

  • CREATE TABLE 的临时表新增 ON COMMIT 子句(Gavin)

    这增加了在事务提交时删除表或删除所有行的能力。

  • 允许用 WITH HOLD 在事务之外使用游标(Neil)

    在以前的版本中,游标在创建它的事务结束时被删除。现在可以用 WITH HOLD 选项创建游标,这允许在创建事务提交后继续访问它们。

  • FETCH 0MOVE 0 现在不做任何事情(Bruce)

    在以前的版本中,FETCH 0 获取所有剩余行,MOVE 0 移到游标末尾。

  • 按照 SQL 标准,让 FETCHMOVE 返回获取/移动的行数,如果位于游标开头/末尾则返回零(Bruce)

    在以前的版本中,FETCHMOVE 返回的行数没有准确反映处理的行数。

  • 正确处理游标的 SCROLL,否则报告错误(Neil)

    对某些类型的查询允许随机访问(前向和后向滚动)需要一些额外的工作才能做到。如果创建游标时指定了 SCROLL,将执行这些额外工作。此外,如果游标以 NO SCROLL 创建,则不允许随机访问。

  • FETCHMOVE 实现 SQL 兼容的选项 FIRSTLASTABSOLUTE nRELATIVE n(Tom)

  • 允许对 DECLARE CURSOR 使用 EXPLAIN(Tom)

  • 允许 CLUSTER 默认使用标记为预聚簇的索引(Alvaro Herrera)

  • 允许 CLUSTER 聚簇所有表(Alvaro Herrera)

    这允许用单条命令重新聚簇数据库中所有先前聚簇过的表。

  • 禁止对部分索引使用 CLUSTER(Tom)

  • 允许 COPY 文件中的 DOS 和 Mac 行尾(Bruce)

  • 不允许字面回车作为数据值,反斜杠-回车和 \r 仍被允许(Bruce)

  • COPY 变更(二进制、\.)(Tom)

  • COPY 失败中干净恢复(Tom)

  • 防止 COPY 中可能的内存泄漏(Tom)

  • 使 TRUNCATE 事务安全(Rod)

    TRUNCATE 现在可以在事务内使用。如果事务中止,TRUNCATE 所做的更改会自动回滚。

  • 允许预备/绑定 FETCHEXPLAIN 等工具命令(Tom)

  • 新增 EXPLAIN EXECUTE(Neil)

  • 通过减少 WAL 流量改进索引上的 VACUUM 性能(Tom)

  • 函数索引已被推广为表达式上的索引(Tom)

    在以前的版本中,函数索引只支持应用于一个或多个列名的简单函数。此版本允许任何类型的标量表达式。

  • SHOW TRANSACTION ISOLATIONSET TRANSACTION ISOLATION 的输入匹配(Tom)

  • 让对非本地数据库的 COMMENT ON DATABASE 生成警告而不是错误(Rod)

    数据库注释存储在数据库本地表中,因此对数据库的注释必须存储在每个数据库中。

  • 改进 LISTEN/NOTIFY 的可靠性(Tom)

  • 允许 REINDEX 可靠地重新索引非共享系统目录索引(Tom)

    这允许重新索引系统表而不需要独立会话,这在以前的版本中是必需的。现在唯一需要独立会话来重新索引的是全局系统表 pg_databasepg_shadowpg_group

E.177.3.7. 数据类型和函数变更

  • 新服务器参数 extra_float_digits,控制浮点数的精度显示(Pedro Ferreira、Tom)

    这控制导致回归测试问题的输出精度。

  • 允许 +1300 作为数字时区说明符,用于 FJST(Tom)

  • 移除很少使用的函数 oidrandoidsranduserfntest(Neil)

  • md5() 函数加入主服务器,此前已在 contrib/pgcrypto 中(Joe)

    MD5 函数是常被要求的。需要更复杂的加密能力时,请使用 contrib/pgcrypto

  • 扩大 timestamp 的日期范围(John Cochran)

  • 更改 EXTRACT(EPOCH FROM timestamp),使 timestamp without time zone 被假定处于本地时间而不是 GMT(Tom)

  • 以防操作系统不防止除以零,捕获它(Tom)

  • numeric 数据类型内部改为以 10000 为基数(Tom)

  • 新函数 hostmask()(Greg Wickham)

  • to_char()to_timestamp() 的修复(Karel)

  • 允许接受任意参数数据类型并返回任意数据类型的函数,使用 anyelementanyarray(Joe)

    这允许创建能用于任何数据类型的函数。

  • 数组现在可以指定为 ARRAY[1,2,3]ARRAY[['a','b'],['c','d']]ARRAY[ARRAY[ARRAY[2]]](Joe)

  • 允许数组的正确比较,包括 ORDER BYDISTINCT 支持(Joe)

  • 允数组列上的索引(Joe)

  • 允许用 || 连接数组(Joe)

  • 允许 WHERE 限定 expr op ANY/SOME/ALL (array_expr)(Joe)

    这允许数组表现得像值列表,用于诸如 SELECT * FROM tab WHERE col IN (array_val) 之类的用途。

  • 新数组函数 array_appendarray_catarray_lowerarray_prependarray_to_stringarray_upperstring_to_array(Joe)

  • 允许用户定义的聚合使用多态函数(Joe)

  • 允许给空数组赋值(Joe)

  • 允许 timetimestampinterval 输入值的秒字段为 60(Tom)

    闰秒需要六十秒的值。

  • 允许 cidr 数据类型转换为 text(Tom)

  • 不允许 SET TIMEZONE 中的无效时区名

  • char 转换为 varchartext 时修剪尾随空格(Tom)

  • float(p) 用二进制位而不是十进制位度量精度 p(Tom)

  • inetcidr 数据类型添加 IPv6 支持(Michael Graff)

  • 新增 family() 函数,报告地址是 IPv4 还是 IPv6(Michael Graff)

  • SHOW datestyle 生成与 SET datestyle 所用类似的输出(Tom)

  • EXTRACT(TIMEZONE)SET/SHOW TIME ZONE 遵循 SQL 对时区偏移符号的约定,即正值为 UTC 以东(Tom)

  • 修复 date_trunc('quarter', ...)(Böjthe Zoltán)

    以前的版本对此函数调用返回不正确的值。

  • 使 initcap() 更兼容 Oracle(Mike Nolan)

    initcap() 现在把任何非字母数字字符之后出现的字母大写,而不只是空白之后。

  • 对非 ISO-8601 格式的日期值只允许 datestyle 字段顺序(Greg)

  • 新增 datestyleMDYDMYYMD 来设置输入字段顺序;为向后兼容保留 USEuropean(Tom)

  • 'now''today' 这样的字符串字面量将不再可用作列默认值。请改用 now()current_timestamp 等函数。(预备语句需要此变更)(Tom)

  • min()/max() 中把 NaN 当作大于任何其他值(Tom)

    在大多数用途中 NaN 已排在普通数值之后,但 min()max() 没有正确处理。

  • 防止 interval 抑制 :00 秒的显示

  • 新函数 pg_get_triggerdef(prettyprint)pg_conversion_is_visible()(Christopher)

  • 允许时间指定为 0405060405(Tom)

  • 输入日期顺序现在必须是 YYYY-MM-DD(4 位年份)或匹配 datestyle

  • pg_get_constraintdef 支持唯一、主键和检查约束(Christopher)

E.177.3.8. 服务器端语言变更

  • 防止对零行记录变量使用 RETURN NEXT 时 PL/pgSQL 崩溃(Tom)

  • 让 PL/Python 的 spi_execute 接口正确处理空值(Andrew Bosma)

  • 允许 PL/pgSQL 不用 %ROWTYPE 声明组合类型的变量(Tom)

  • 修复 PL/Python 的 _quote() 函数以处理大整数

  • 把 PL/Python 改为不可信语言,现名 plpythonu(Kevin Jacobs、Tom)

    Python 语言不再支持受限执行环境,因此删除了可信版 PL/Python。如果这种情况改变,将重新添加可供非超级用户使用的 PL/Python 版本。

  • 允许多态 PL/pgSQL 函数(Joe、Tom)

  • 允许多态 SQL 函数(Joe)

  • 改进了 PL/pgSQL 的编译函数缓存机制,完全支持多态(Joe)

  • 在 PL/pgSQL 中新增表示函数实际返回类型的新参数 $0(Joe)

  • 允许 PL/Tcl 和 PL/Python 在多个表上使用同一触发器(Tom)

  • 修复 PL/Tcl 的 spi_prepare,使其接受参数类型列表中完全限定的类型名(Jan)

E.177.3.9. psql 变更

  • 新增 \pset pager always,总是使用分页器(Greg)

    这强制使用分页器,即使行数少于屏幕高度。这对跨多个屏幕行的行很有价值。

  • 改进 Tab 补全(Rod、Ross Reedstrom、Ian Barwick)

  • \? 帮助重排为分组(Harald Armin Massa、Bruce)

  • 新增列出模式、转换和编码转换的反斜杠命令(Christopher)

  • \encoding 现在根据服务器参数 client_encoding 变化(Tom)

    在以前的版本中,\encoding 不知道用 SET client_encoding 所做的编码更改。

  • 把编辑器缓冲区保存到 readline 历史(Ross)

    当用 \e 编辑查询时,结果被保存到 readline 历史中,可用上箭头检索。

  • 改进 \d 显示(Christopher)

  • 增强 HTML 模式使其更符合标准(Greg)

  • 新的 \set AUTOCOMMIT off 能力(Tom)

    这取代了被移除的服务器参数 autocommit

  • 新的 \set VERBOSITY,控制错误细节(Tom)

    这控制新的错误报告细节。

  • 新的提示符转义序列 %x,显示事务状态(Tom)

  • psql 的长选项现在在所有平台上可用

E.177.3.10. pg_dump 变更

  • 多个 pg_dump 修复,包括 tar 格式和大对象

  • 允许 pg_dump 转储特定的模式(Neil)

  • 让 pg_dump 保留列存储特性(Christopher)

    这保留 ALTER TABLE ... SET STORAGE 信息。

  • 让 pg_dump 保留 CLUSTER 特性(Christopher)

  • 让 pg_dumpall 用 GRANT/REVOKE 转储数据库级权限(Tom)

  • 允许 pg_dumpall 支持 pg_dump 的选项 -a-s-x(Tom)

  • 防止 pg_dump 把命令行上指定的标识符转为小写(Tom)

  • pg_dump 选项 --use-set-session-authorization--no-reconnect 现在无作用,所有转储都使用 SET SESSION AUTHORIZATION

    pg_dump 不再重新连接来切换用户,而是始终使用 SET SESSION AUTHORIZATION。这将减少恢复期间的口令提示。

  • pg_dump 的长选项现在在所有平台上可用

    PostgreSQL 现在包含自己的长选项处理例程。

E.177.3.11. libpq 变更

  • 新增用于在 Windows 上释放内存的函数 PQfreemem,建议用于 NOTIFY(Bruce)

    Windows 要求库中分配的内存由同一库中的函数释放,因此 free() 不能释放 libpq 分配的内存。PQfreemem 是释放 libpq 内存的正确方式,特别是在 Windows 上,也建议在其他平台上使用。

  • 记录服务能力并添加示例文件(Bruce)

    这允许客户端在客户端机器上的中心文件中查找连接信息。

  • PQsetdbLoginPQconnectdb 有相同的默认值(Tom)

  • 允许 libpq 在结果集过大时干净地失败(Tom)

  • 改进函数 PQunescapeBytea 的性能(Ben Lamb)

  • configure 选项 --enable-thread-safety 允许线程安全的 libpq(Lee Kindness、Philip Yarra)

  • 允许函数 pqInternalNotice 接受格式串和参数而不只是预先格式化的消息(Tom、Sean Chittenden)

  • sslmodedisableallowpreferrequire 控制 SSL 协商(Jon Jensen)

  • 允许新的错误码和文本级别(Tom)

  • 允许访问查询结果的基础表和列(Tom)

    这对想知道与特定结果集关联的基础表和列名的查询构建器应用程序很有帮助。

  • 允许访问当前事务状态(Tom)

  • 新增把二进制数据直接传递给服务器的能力(Tom)

  • 新增函数 PQexecPreparedPQsendQueryPrepared,执行先前预备语句的绑定/执行(Tom)

E.177.3.12. JDBC 变更

  • 允许可更新结果集上的 setNull

  • 允许预备语句上的 executeBatch(Barry)

  • 支持 SSL 连接(Barry)

  • 处理结果集中的模式名(Paul Sorenson)

  • 新增 refcursor 支持(Nic Ferrier)

E.177.3.13. 其他接口变更

  • 防止 libpgtcl 关闭期间可能的内存泄漏或核心转储(Tom)

  • 为 ECPG 新增 Informix 兼容性(Michael)

    这允许 ECPG 处理使用某些 Informix 扩展编写的嵌入式 C 程序。

  • 为 ECPG 新增定长的 decimal 类型,用于 Informix(Michael)

  • configure 选项 --enable-thread-safety 允许线程安全的嵌入式 SQL 程序(Lee Kindness、Bruce)

    这允许多个线程同时访问数据库。

  • 把 Python 客户端 PyGreSQL 移到 http://www.pygresql.org(Marc)

E.177.3.14. 源代码变更

  • 消除对单独的平台几何回归结果文件的需要(Tom)

  • 改进的 PPC 锁定原语(Reinhard Max)

  • 新函数 palloc0,分配并清零内存(Bruce)

  • 修复 s390x CPU(64 位)的锁定代码(Tom)

  • 允许 OpenBSD 使用本地 ident 凭据(William Ahern)

  • 使查询计划树对执行器只读(Tom)

  • 新增 Darwin 启动脚本(David Wheeler)

  • 允许 libpq 用 Borland C++ 编译器编译(Lester Godwin、Karl Waclawek)

  • 需要时使用我们自己的 getopt_long() 版本(Peter)

  • 把管理脚本转换为 C(Peter)

  • 如果从 CVS 构建,现在需要 Bison >= 1.85 来构建 PostgreSQL 语法

  • 把文档合并为一本书(Peter)

  • 新增 Windows 兼容函数(Bruce)

  • 允许客户端接口在 MinGW 下编译(Bruce)

  • 新的用于错误报告的 ereport() 函数(Tom)

  • 支持 Linux 上的 Intel 编译器(Peter)

  • 改进 Linux 启动脚本(Slawomir Sudnik、Darko Prenosil)

  • 新增对 AMD Opteron 和 Itanium 的支持(Jeffrey W. Baker、Bruce)

  • configure 移除 --enable-recode 选项

    既然有了 CREATE CONVERSION,这不再需要。

  • 如果未找到自旋锁代码则产生编译错误(Bruce)

    没有自旋锁代码的平台现在将编译失败,而不是静默使用信号量。此失败可以用新的 configure 选项禁用。

E.177.3.15. 附加模块变更

  • 把 dbmirror 许可证改为 BSD

  • 改进 earthdistance(Bruno Wolff III)

  • pgcrypto 的可移植性改进(Marko Kreen)

  • 防止 xml 中的崩溃(John Gray、Michael Richards)

  • 更新 oracle

  • 更新 mysql

  • 更新 cube(Bruno Wolff III)

  • 更新 earthdistance 以使用 cube(Bruno Wolff III)

  • 更新 btree_gist(Oleg)

  • 新的 tsearch2 全文搜索模块(Oleg、Teodor)

  • 为 tablefuncs 新增基于哈希的 crosstab 函数(Joe)

  • 为 tablefuncs 新增用来对 connectby() 兄弟节点排序的 serial 列(Nabil Sayegh、Joe)

  • 为 dblink 新增命名持久连接(Shridhar Daithanka)

  • 新的 pg_autovacuum 允许自动 VACUUM(Matthew T. O'Connor)

  • 让 pgbench 遵循环境变量 PGHOSTPGPORTPGUSER(Tatsuo)

  • 改进 intarray(Teodor Sigaev)

  • 改进 pgstattuple(Rod)

  • 修复 fuzzystrmatch 中 metaphone() 的缺陷

  • 改进 adddepend(Rod)

  • 更新 spi/timetravel(Böjthe Zoltán)

  • 修复 dbase 的 -s 选项并改进非 ASCII 处理(Thomas Behr、Márcio Smiderle)

  • 移除 array 模块,因为其功能现已默认包含(Joe)

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。