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

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

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

A.31. 版本 7.2 #

发行日期

2002-02-04

A.31.1. 概述

此发行版改进了 PostgreSQL 在高负载应用中的使用。

此发行版的主要变更:

VACUUM

清理(vacuum)不再锁定表,因此在清理期间允许正常的用户访问。 新的 VACUUM FULL 命令执行旧式清理:锁定表并收缩表 的磁盘副本。

事务

超过四十亿事务的安装不再有问题。

OID

OID 现在是可选的。对于 OID 使用过度的情况,用户现在可以创建 不带 OID 的表。

优化器

系统现在会在 ANALYZE 期间计算直方图列统计信息, 使优化器能够做出更好的选择。

安全性

新的 MD5 加密选项允许更安全地存储和传输口令。Linux 和 BSD 系统 上还提供了新的 Unix 域套接字认证选项。

统计

管理员可以使用新的表访问统计模块获取有关表和索引使用情况的 细粒度信息。

国际化

程序和库消息现在可以用多种语言显示。

A.31.2. 迁移到版本 7.2

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

注意以下不兼容之处:

  • 此发行版中 VACUUM 命令的语义发生了变化。你可能 需要相应地更新你的维护流程。

  • 在此发行版中,使用 = NULL 的比较将总是返回 false(更准确地说,是 NULL)。以前的发行版会自动将此语法转换为 IS NULL。可以通过 postgresql.conf 参数重新启用旧行为。

  • pg_hba.conf 和 pg_ident.conf 配置现在 只在收到 SIGHUP 信号之后重新加载,而不是在每次 连接时加载。

  • 函数 octet_length() 现在返回未压缩的数据长度。

  • 日期/时间值 'current' 不再可用。你需要改写 你的应用程序。

  • 函数 timestamp()、time() 和 interval() 不再可用。请用 timestamp 'string' 或 CAST 代替 timestamp()。

SELECT ... LIMIT #,# 语法将在下一个发行版中移除。 你应当把查询改为使用独立的 LIMIT 和 OFFSET 子句,例如 LIMIT 10 OFFSET 20。

A.31.3. 变更

A.31.3.1. 服务器操作

  • 在独立的目录中创建临时文件(Bruce)

  • postmaster 启动时删除孤立的临时文件(Bruce)

  • 为一些系统表添加唯一索引(Tom)

  • 系统表操作符重组(Oleg Bartunov、Teodor Sigaev、Tom)

  • 将 pg_log 更名为 pg_clog(Tom)

  • 启用 SIGTERM、SIGQUIT 来杀死后端(Jan)

  • 移除后端数量的编译期限制(Tom)

  • 信号量资源失败时更好的清理(Tatsuo、Tom)

  • 允许安全的事务 ID 回卷(Tom)

  • 从一些系统表中移除 OID(Tom)

  • 移除 "triggered data change violation" 错误检查(Tom)

  • 预备/保存计划的 SPI 门廊创建(Jan)

  • 允许 SPI 列函数对系统列工作(Tom)

  • 长值压缩改进(Tom)

  • 用于表、索引访问的统计收集器(Jan)

  • 将超长序列名截断为合理值(Tom)

  • 以毫秒为单位测量事务时间(Thomas)

  • 修复 TID 顺序扫描(Hiroshi)

  • 超级用户 ID 现在固定为 1(Peter E)

  • 新的 pg_ctl "reload" 选项(Tom)

A.31.3.2. 性能

  • 优化器改进(Tom)

  • 供优化器使用的新的直方图列统计信息(Tom)

  • 重用预写日志文件而不是丢弃它们(Tom)

  • 缓存改进(Tom)

  • IS NULL、IS NOT NULL 优化器改进(Tom)

  • 改进锁管理器以减少锁竞争(Tom)

  • 为索引访问支持函数保留 relcache 项(Tom)

  • 改进 NUMERIC 中 NaN 和无穷大的选择率(Tom)

  • R-tree 性能改进(Kenneth Been)

  • B-树分割更高效(Tom)

A.31.3.3. 权限

  • 将 UPDATE、DELETE 权限改为彼此独立(Peter E)

  • 新的 REFERENCES、TRIGGER 权限(Peter E)

  • 允许一次对多个用户执行 GRANT/REVOKE(Peter E)

  • 新的 has_table_privilege() 函数(Joe Conway)

  • 允许非超级用户清理数据库(Tom)

  • 新的 SET SESSION AUTHORIZATION 命令(Peter E)

  • 修复新创建表上权限修改的缺陷(Tom)

  • 禁止非超级用户访问 pg_statistic,添加用户可访问的视图(Tom)

A.31.3.4. 客户端认证

  • 在认证之前 fork postmaster 以防止挂起(Peter E)

  • 在 Linux、*BSD 上添加基于 Unix 域套接字的 ident 认证(Helge Bahmann、Oliver Elphick、Teodor Sigaev、Bruce)

  • 添加使用 MD5 加密的口令认证方法(Bruce)

  • 允许使用 MD5 加密存储的口令(Bruce)

  • PAM 认证(Dominic J. Eidson)

  • 只在启动和 SIGHUP 时加载 pg_hba.conf 和 pg_ident.conf(Bruce)

A.31.3.5. 服务器配置

  • 某些时区缩写按澳大利亚而不是北美解释,现在可以在运行时设置(Bruce)

  • 设置默认事务隔离级别的新参数(Peter E)

  • 将 "expr = NULL" 转换为 "expr IS NULL" 的新参数,默认关闭(Peter E)

  • 控制 VACUUM 内存使用的新参数(Tom)

  • 设置客户端认证超时的新参数(Tom)

  • 设置最大打开文件数的新参数(Tom)

A.31.3.6. 查询

  • INSERT 规则添加的语句现在在 INSERT 之后执行(Jan)

  • 禁止目标列表中出现未修饰的关系名(Bruce)

  • ORDER BY 中 NULL 现在排在所有正常值之后(Tom)

  • 新的 IS UNKNOWN、IS NOT UNKNOWN 布尔测试(Tom)

  • 新的 SHARE UPDATE EXCLUSIVE 锁模式(Tom)

  • 新的 EXPLAIN ANALYZE 命令,显示运行时间和行数(Martijn van Oosterhout)

  • 修复 LIMIT 与子查询的问题(Tom)

  • 修复 LIMIT、DISTINCT ON 被下推到子查询的问题(Tom)

  • 修复嵌套 EXCEPT/INTERSECT(Tom)

A.31.3.7. 模式操作

  • 修复临时表中的 SERIAL(Bruce)

  • 允许临时序列(Bruce)

  • 序列现在内部使用 int8(Tom)

  • 新的 SERIAL8 创建带序列的 int8 列,默认仍是 SERIAL4(Tom)

  • 使用 WITHOUT OIDS 使 OID 变为可选(Tom)

  • 为 CREATE TYPE 添加 %TYPE 语法(Ian Lance Taylor)

  • 为 CHECK 约束添加 ALTER TABLE / DROP CONSTRAINT(Christopher Kings-Lynne)

  • 新的 CREATE OR REPLACE FUNCTION 用于更改现有函数(保留函数 OID)(Gavin Sherry)

  • 添加 ALTER TABLE / ADD [ UNIQUE | PRIMARY ](Christopher Kings-Lynne)

  • 允许重命名视图中的列

  • 使 ALTER TABLE / RENAME COLUMN 更新索引的列名(Brent Verner)

  • 修复继承表上 ALTER TABLE / ADD CONSTRAINT ... CHECK 的问题(Stephan Szabo)

  • ALTER TABLE RENAME 正确更新外键触发器参数(Brent Verner)

  • DROP AGGREGATE 和 COMMENT ON AGGREGATE 现在接受 aggtype(Tom)

  • 为 SQL 函数添加自动的返回类型数据转换(Tom)

  • 允许 GiST 索引处理 NULL 和多键索引(Oleg Bartunov、Teodor Sigaev、Tom)

  • 启用部分索引(Martijn van Oosterhout)

A.31.3.8. 实用命令

  • 添加 RESET ALL、SHOW ALL(Marko Kreen)

  • CREATE/ALTER USER/GROUP 现在允许任意顺序的选项(Vince)

  • 添加 LOCK A, B, C 功能(Neil Padgett)

  • 为 CREATE/ALTER USER 添加新的 ENCRYPTED/UNENCRYPTED 选项(Bruce)

  • 新的轻量级 VACUUM 不锁定表;旧语义以 VACUUM FULL 提供(Tom)

  • 禁止对视图执行 COPY TO/FROM(Bruce)

  • COPY DELIMITERS 字符串必须恰好为一个字符(Tom)

  • 索引元组少于堆元组的 VACUUM 警告现在只在适当时出现(Martijn van Oosterhout)

  • 修复 CREATE INDEX 的权限检查(Tom)

  • 禁止对 CREATE/DROP INDEX/TRIGGER/VIEW 的不当使用(Tom)

A.31.3.9. 数据类型和函数

  • SUM()、AVG()、COUNT() 现在内部使用 int8 以提升速度(Tom)

  • 添加 convert()、convert2()(Tatsuo)

  • 新函数 bit_length()(Peter E)

  • 使 CHAR(n)/VARCHAR(n) 中的 "n" 表示字符数而不是字节数(Tatsuo)

  • CHAR()、VARCHAR() 现在拒绝过长的字符串(Peter E)

  • BIT VARYING 现在拒绝过长的位串(Peter E)

  • BIT 现在拒绝与声明长度不匹配的位串(Peter E)

  • INET、CIDR 文本转换函数(Alex Pilosov)

  • INET、CIDR 的操作符 << 和 <<= 现在可索引(Alex Pilosov)

  • Bytea 的 \### 现在要求有效的三位八进制数

  • Bytea 比较改进,现在支持 =、<>、>、>=、< 和 <=

  • Bytea 现在支持 B-树索引

  • Bytea 现在支持 LIKE、LIKE...ESCAPE、NOT LIKE、NOT LIKE...ESCAPE

  • Bytea 现在支持连接

  • 新的 bytea 函数:position、substring、trim、btrim 和 length

  • encode() 函数的新模式 "escaped",在最少转义的 bytea 与 text 之间转换

  • 添加 pg_database_encoding_max_length()(Tatsuo)

  • 添加 pg_client_encoding() 函数(Tatsuo)

  • now() 返回毫秒精度的时间(Thomas)

  • 新的 TIMESTAMP WITHOUT TIMEZONE 数据类型(Thomas)

  • 添加带 "T" 的 ISO 日期/时间规范,yyyy-mm-ddThh:mm:ss(Thomas)

  • 新的 xid/int 比较函数(Hiroshi)

  • 为 TIME、TIMESTAMP 和 INTERVAL 数据类型添加精度(Thomas)

  • 修改类型强制转换逻辑以优先尝试二进制兼容函数(Tom)

  • 新的 encode() 函数默认安装(Marko Kreen)

  • 改进的 to_*() 转换函数(Karel Zak)

  • 使用单字节编码时优化 LIKE/ILIKE(Tatsuo)

  • contrib/pgcrypto 中的新函数:crypt()、hmac()、encrypt()、gen_salt()(Marko Kreen)

  • 更正 translate() 函数的描述(Bruce)

  • 为 SET TIME ZONE 添加 INTERVAL 参数(Thomas)

  • 添加 INTERVAL YEAR TO MONTH(等)语法(Thomas)

  • 使用单字节编码时优化 length 函数(Tatsuo)

  • 修复 path_inter、path_distance、path_length、dist_ppath 以处理闭合路径(Curtis Barrett、Tom)

  • octet_length(text) 现在返回未压缩长度(Tatsuo、Bruce)

  • 处理日期/时间字面量中 "July" 这样的全名(Greg Sabino Mullane)

  • 一些 datatype() 函数调用的求值方式发生了变化

  • 添加对儒略和 ISO 时间规范的支持(Thomas)

A.31.3.10. 国际化

  • psql、pg_dump、libpq 和服务器的国家语言支持(Peter E)

  • 简体中文、繁体中文、捷克语、法语、德语、匈牙利语、俄语、瑞典语的消息翻译(Peter E、Serguei A. Mokhov、Karel Zak、Weiping He、Zhenbang Wei、Kovacs Zoltan)

  • 使 trim、ltrim、rtrim、btrim、lpad、rpad、translate 感知多字节(Tatsuo)

  • 添加 LATIN5、6、7、8、9、10 支持(Tatsuo)

  • 添加 ISO 8859-5、6、7、8 支持(Tatsuo)

  • 更正 LATIN5 使其表示 ISO-8859-9 而不是 ISO-8859-5(Tatsuo)

  • 使 mic2ascii() 感知非 ASCII(Tatsuo)

  • 拒绝无效的多字节字符序列(Tatsuo)

A.31.3.11. PL/pgSQL

  • 现在 SELECT 循环使用门廊,允许超大结果集(Jan)

  • CURSOR 和 REFCURSOR 支持(Jan)

  • 现在可以返回打开的游标(Jan)

  • 添加 ELSEIF(Klaus Reger)

  • 改进 PL/pgSQL 错误报告,包括错误位置(Tom)

  • 为兼容性,允许在游标声明中使用 IS 或 FOR 关键字(Bruce)

  • 修复 SELECT ... FOR UPDATE(Tom)

  • 修复 PERFORM 返回多行的问题(Tom)

  • 使 PL/pgSQL 使用服务器的类型强制转换代码(Tom)

  • 内存泄漏修复(Jan、Tom)

  • 使末尾分号变为可选(Tom)

A.31.3.12. PL/Perl

  • 新的非信任 PL/Perl(Alex Pilosov)

  • 即使 libperl 不是共享库,PL/Perl 现在也能在某些平台上构建(Peter E)

A.31.3.13. PL/Tcl

  • 现在报告 errorInfo(Vsevolod Lobko)

  • 添加 spi_lastoid 函数(bob@redivi.com)

A.31.3.14. PL/Python

  • ……是新增的(Andrew Bosma)

A.31.3.15. psql

  • \d 按唯一、主键分组显示索引(Christopher Kings-Lynne)

  • 允许反斜杠命令带末尾分号(Greg Sabino Mullane)

  • 如果可能,从 /dev/tty 读取口令

  • 更改用户和数据库时强制新的口令提示(Tatsuo、Tom)

  • 为 Unicode 格式化正确的列数(Patrice)

A.31.3.16. libpq

  • 新函数 PQescapeString(),转义命令字符串中的引号(Florian Weimer)

  • 新函数 PQescapeBytea(),转义二进制字符串以用作 SQL 字符串字面量

A.31.3.17. JDBC

  • 返回 INSERT 的 OID(Ken K)

  • 处理更多数据类型(Ken K)

  • 处理字符串中的单引号和换行(Ken K)

  • 处理 NULL 变量(Ken K)

  • 修复时区处理(Barry Lind)

  • 改进的 Druid 支持

  • 允许非多字节服务器使用八位字符(Barry Lind)

  • 支持 BIT、BINARY 类型(Ned Wolpert)

  • 减少内存使用(Michael Stephens、Dave Cramer)

  • 更新 DatabaseMetaData(Peter E)

  • 添加 DatabaseMetaData.getCatalogs()(Peter E)

  • 编码修复(Anders Bengtsson)

  • Get/setCatalog 方法(Jason Davies)

  • DatabaseMetaData.getColumns() 现在返回列默认值(Jason Davies)

  • DatabaseMetaData.getColumns() 性能改进(Jeroen van Vianen)

  • JDBC1 和 JDBC2 的部分合并(Anders Bengtsson)

  • 事务性能改进(Barry Lind)

  • 数组修复(Greg Zoller)

  • 序列化添加

  • 修复批处理(Rene Pijlman)

  • ExecSQL 方法重组(Anders Bengtsson)

  • GetColumn() 修复(Jeroen van Vianen)

  • 修复 isWriteable() 函数(Rene Pijlman)

  • 改进 JDBC2 一致性测试的通过率(Rene Pijlman)

  • 添加 bytea 类型能力(Barry Lind)

  • 添加 isNullable()(Rene Pijlman)

  • JDBC 日期/时间测试套件修复(Liam Stewart)

  • 修复 SELECT 'id' AS xxx FROM table(Dave Cramer)

  • 修复 DatabaseMetaData 以正确显示精度(Mark Lillywhite)

  • 新的 getImported/getExported 键(Jason Davies)

  • MD5 口令加密支持(Jeremy Wohl)

  • 修复以真正使用类型缓存(Ned Wolpert)

A.31.3.18. ODBC

  • 移除查询大小限制(Hiroshi)

  • 移除文本字段大小限制(Hiroshi)

  • 修复多字节模式下的 SQLPrimaryKeys(Hiroshi)

  • 允许 ODBC 过程调用(Hiroshi)

  • 改进布尔处理(Aidan Mountford)

  • 大多数配置选项现在可通过 DSN 设置(Hiroshi)

  • 多字节和性能修复(Hiroshi)

  • 允许驱动与 iODBC 或 unixODBC 一起使用(Peter E)

  • MD5 口令加密支持(Bruce)

  • 为 odbc.sql 添加更多兼容函数(Peter E)

A.31.3.19. ECPG

  • 实现 EXECUTE ... INTO(Christof Petig)

  • 多行描述符支持(例如 CARDINALITY)(Christof Petig)

  • 修复 GRANT 参数(Lee Kindness)

  • 修复 INITIALLY DEFERRED 缺陷

  • 若干缺陷修复(Michael、Christof Petig)

  • 指示变量数组的自动分配(int *ind_p=NULL)

  • 字符串数组的自动分配(char **foo_pp=NULL)

  • 修复 ECPGfree_auto_mem

  • 所有具有外部链接的函数名现在都以 ECPG 为前缀

  • 结构体数组的修复(Michael)

A.31.3.20. 其他接口

  • 修复 Python fetchone()(Gerhard Haring)

  • 在适当处在 Tcl 中使用 UTF、Unicode(Vsevolod Lobko、Reinhard Max)

  • 添加 Tcl COPY TO/FROM(ljb)

  • 防止 pg_dump 输出默认索引操作符类(Tom)

  • 修复 libpgeasy 内存泄漏(Bruce)

A.31.3.21. 构建和安装

  • configure、动态加载器和共享库修复(Peter E)

  • QNX 4 移植的修复(Bernd Tegge)

  • Cygwin 和 Windows 移植的修复(Jason Tishler、Gerhard Haring、Dmitry Yurtaev、Darko Prenosil、Mikhail Terekhov)

  • 修复 Windows 套接字通信失败(Magnus、Mikhail Terekhov)

  • Hurd 编译修复(Oliver Elphick)

  • BeOS 修复(Cyril Velter)

  • 移除 configure --enable-unicode-conversion,现在由多字节启用(Tatsuo)

  • AIX 修复(Tatsuo、Andreas)

  • 修复并行 make(Peter E)

  • 将 SQL 语言手册页安装到操作系统特定的目录(Peter E)

  • 将 config.h 重命名为 pg_config.h(Peter E)

  • 重组头文件的安装布局(Peter E)

A.31.3.22. 源代码

  • 移除 SEP_CHAR(Bruce)

  • 新的 GUC 钩子(Tom)

  • 合并 GUC 与命令行处理(Marko Kreen)

  • 移除 EXTEND INDEX(Martijn van Oosterhout、Tom)

  • 缩进 Java 代码的新 pgjindent 工具(Bruce)

  • 在 C++ 下编译时移除 true/false 的定义(Leandro Fanzone、Tom)

  • pgindent 修复(Bruce、Tom)

  • 在适当处用 strcmp() 替换 strcasecmp()(Peter E)

  • Dynahash 可移植性改进(Tom)

  • 在自旋锁结构中添加 'volatile' 的使用

  • 改进信号处理逻辑(Tom)

A.31.3.23. Contrib

  • 新的 contrib/rtree_gist(Oleg Bartunov、Teodor Sigaev)

  • 新的 contrib/tsearch 全文索引(Oleg、Teodor Sigaev)

  • 添加 contrib/dblink 用于远程数据库访问(Joe Conway)

  • contrib/ora2pg Oracle 转换工具(Gilles Darold)

  • contrib/xml XML 转换工具(John Gray)

  • contrib/fulltextindex 修复(Christopher Kings-Lynne)

  • 新的 contrib/fuzzystrmatch,合并了 levenshtein、metaphone 和 soundex(Joe Conway)

  • 为 contrib/intarray 添加布尔查询、二分查找和修复(Oleg Bartunov)

  • 新的 pg_upgrade 工具(Bruce)

  • 为 pg_resetxlog 添加新选项(Bruce、Tom)

提交更正

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