E.282. 版本 7.2
发布日期: 2002-02-04
E.282.1. 概述
这个版本改善了PostgreSQL在高负荷环境下的能力。
这个版本里的主要变化∶
- VACUUM
Vacuum 不再锁住表,因此就允许普通用户在 vacuum 的时候访问。 新的VACUUM FULL命令做的就是老的 vacuum,它先锁定该表然后缩小表的磁盘文件.
- 事务
不再有超过四十亿次事务的安装问题了。
- OIDs
OID 现在是可选的。用户现在可以不用带 OID 创建表,以免过多地使用 OID。
- 优化器
系统现在在ANALYZE的时候计算直方图列统计,这样就允许选择更好的优化器。
- 安全性
新的 MD5 加密选项允许我们有更安全的口令存储和传输。 新的 Unix 域套接字认证选项可以在 Linux 和 BSD 系统上使用。
- 统计
管理员现在可以使用新的表访问统计模块获取有关表和索引的使用方面的更细致的信息.
- 国际化
程序和库消息现在可以以好几种语言显示。
E.282.2. 迁移到版本 7.2
对于使用任何以前版本的人来说,用pg_dump进行一次转储/恢复是必需的。
观察下面的不兼容性∶
这个版本里的VACUUM命令的语义发生了变化。你可能需要相应更新你的维护程序。
在这个版本里,用= NULL进行的比较将总是返回假(或者更准确地说是 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。
E.282.3. 修改列表
E.282.3.1. 服务器操作
在一个单独的路径中创建临时文件 (Bruce)
在主进程启动时删除孤立的临时文件 (Bruce)
添加唯一索引到一些系统表 (Tom)
系统表操作符重组 (Oleg Bartunov, Teodor Sigaev, Tom)
重命名pg_log to 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)
E.282.3.2. 性能
改善优化器 (Tom)
为优化器新增直方图列统计 (Tom)
重新使用预写式日志文件而不是丢弃它们 (Tom)
改善缓存 (Tom)
IS NULL, IS NOT NULL优化器改善 (Tom)
改善锁管理器以减少锁的争用 (Tom)
为索引访问支持函数保持relcache条目 (Tom)
允许NUMERIC中NaN和无穷的更好的选择性 (Tom)
R-tree性能改善 (Kenneth Been)
B-tree分离更高效 (Tom)
E.282.3.3. 权限
更改UPDATE, DELETE权限为不同的 (Peter E)
新增REFERENCES, TRIGGER 权限 (Peter E)
允许一次多于一个用户GRANT/REVOKE to/from (Peter E)
新增has_table_privilege()函数 (Joe Conway)
允许非超级用户vacuum数据库 (Tom)
新增SET SESSION AUTHORIZATION命令 (Peter E)
修复在新创建的表上修改权限的bug (Tom)
不允许非超级用户访问pg_statistic,添加用户可访问的视图 (Tom)
E.282.3.4. 客户端认证
在做认证以阻止挂起之前分叉主进程 (Peter E)
在Linux, *BSD平台的Unix域套接字上添加标识符认证 (Helge Bahmann, Oliver Elphick, Teodor Sigaev, Bruce)
添加使用MD5加密的口令认证方法 (Bruce)
允许存储的口令使用MD5加密 (Bruce)
PAM 认证 (DOMinic J. Eidson)
只在启动和SIGHUP时加载pg_hba.conf 和 pg_ident.conf (Bruce)
E.282.3.5. 服务器配置
现在在运行时可设定一些时区缩写的解释为澳大利亚而不是北美 (Bruce)
新增参数设置缺省的事务隔离级别 (Peter E)
新增参数启用"expr = NULL" 到 "expr IS NULL"的转换,缺省为off (Peter E)
新增参数控制VACUUM的内存使用 (Tom)
新增参数设置客户端认证超时 (Tom)
新增参数设置打开文件的最大数量 (Tom)
E.282.3.6. 查询
INSERT规则添加的声明现在在INSERT之后执行 (Jan)
阻止在目标列表中的纯粹的关系名 (Bruce)
NULL现在在ORDER BY中在所有的正常值之后排序 (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)
E.282.3.7. 模式操作
修复临时表中的SERIAL (Bruce)
允许临时序列 (Bruce)
序列现在内部使用int8 (Tom)
新增SERIAL8创建带有序列的int8字段,缺省仍然为SERIAL4 (Tom)
使用WITHOUT OIDS使OID可选 (Tom)
添加%TYPE语法到CREATE 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)
E.282.3.8. 工具命令
添加RESET ALL, SHOW ALL (Marko Kreen)
CREATE/ALTER USER/GROUP现在允许选项顺序任意 (Vince)
添加LOCK A, B, C功能 (Neil Padgett)
新增ENCRYPTED/UNENCRYPTED选项到CREATE/ALTER USER (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)
E.282.3.9. 数据类型和函数
SUM(), AVG(), COUNT()现在为了速度在内部使用int8 (Tom)
添加convert(), convert2() (Tatsuo)
新增函数bit_length() (Peter E)
使"n" 在 CHAR(n)/VARCHAR(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-tree索引
Bytea现在支持LIKE, LIKE...ESCAPE, NOT LIKE, NOT LIKE...ESCAPE
Bytea现在支持串联
新增bytea函数:position, substring, trim, btrim, 和 length
新增encode()函数模式,"escaped",转换最低限度转义的bytea to/from文本
添加pg_database_encoding_max_length() (Tatsuo)
添加pg_client_encoding() 函数 (Tatsuo)
now()返回毫秒精度的时间 (Thomas)
新增 TIMESTAMP WITHOUT TIMEZONE 数据类型 (Thomas)
添加ISO日期/时间规格:"T", 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)
添加INTERVAL参数以SET TIME ZONE (Thomas)
添加INTERVAL YEAR TO MONTH (等等)语法 (Thomas)
当使用单字节编码时优化长度函数 (Tatsuo)
修复path_inter, path_distance, path_length, dist_ppath以处理闭合路径 (Curtis Barrett, Tom)
octet_length(text)现在返回非压缩的长度 (Tatsuo, Bruce)
在日期/时间字面值中处理"July"全名 (Greg Sabino Mullane)
一些datatype()函数调用现在的评估不同
添加Julian 和 ISO时间声明支持 (Thomas)
E.282.3.10. 国际化
在psql, pg_dump, libpq, 和 server中支持国家语言 (Peter E)
用汉语(简化了的,传统的)、捷克语、法语、德语、匈牙利语、俄语、瑞典语翻译消息 (Peter E, Serguei A. Mokhov, Karel Zak, Weiping He, Zhenbang Wei, Kovacs Zoltan)
使trim, ltrim, rtrim, btrim, lpad, rpad意识到翻译多字节 (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)
E.282.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)
E.282.3.12. PL/Perl
新增不信任的PL/Perl (Alex Pilosov)
PL/Perl现在在一些平台上建立,即使libperl不是共享的 (Peter E)
E.282.3.13. PL/Tcl
现在报告errorInfo (Vsevolod Lobko)
添加spi_lastoid函数 ([email protected])
E.282.3.14. PL/Python
...是新增的 (Andrew Bosma)
E.282.3.15. psql
\d 显示不重复的索引,主要分组 (Christopher Kings-Lynne)
在反斜杠命令里允许尾随的分号 (Greg Sabino Mullane)
如果可以,从/dev/tty中读取口令
当改变用户和数据库时强制新的口令提示 (Tatsuo, Tom)
格式化正确的字段编号为unicode
E.282.3.16. libpq
新增函数PQescapeString()以转义命令字符串中的引号 (Florian Weimer)
新增函数PQescapeBytea()为使用SQL字符串文本转义二进制字符串
E.282.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)
E.282.3.18. ODBC
删除查询大小限制 (Hiroshi)
删除文本字段大小限制 (Hiroshi)
修复多字节模式中的SQLPrimaryKeys (Hiroshi)
允许ODBC程序调用 (Hiroshi)
改善布尔处理 (Aidan Mountford)
大部分配置选项现在可以通过DSN设置 (Hiroshi)
多字节,性能修复 (Hiroshi)
允许iODBC 或 unixODBC使用驱动程序 (Peter E)
支持MD5口令加密 (Bruce)
添加更多兼容函数到odbc.sql (Peter E)
E.282.3.19. ECPG
应用了EXECUTE ... INTO (Christof Petig)
多重描述符支持 (e.g. CARDINALITY) (Christof Petig)
修复GRANT参数 (Lee Kindness)
修复INITIALLY DEFERRED bug
各种bug修复 (Michael, Christof Petig)
自动分配指示器变量数组 (int *ind_p=NULL)
自动分配字符串数组 (char **foo_pp=NULL)
修复ECPGfree_auto_mem
所有带有外部链接的函数名现在都有ECPG前缀
修复结构的数组 (Michael)
E.282.3.20. 混合接口
Python 修复 fetchone() (Gerhard Haring)
在 Tcl 中合适的地方使用 UTF, Unicode (Vsevolod Lobko, Reinhard Max)
添加Tcl COPY TO/FROM (ljb)
阻止pg_dump中缺省索引 op 类的输出 (Tom)
修复 libpgeasy 内存泄露 (Bruce)
E.282.3.21. 建立和安装
配置、动态加载和共享库的修复 (Peter E)
修复了 QNX 的四个端口 (Bernd Tegge)
修复了 Cygwin 和 Windows 端口 (Jason Tishler, Gerhard Haring, Dmitry Yurtaev, Darko Prenosil, Mikhail Terekhov)
修复了 Windows 接口通讯失败 (Magnus, Mikhail Terekhov)
硬编译修复 (Oliver Elphick)
BeOS修复 (Cyril Velter)
删除 configure --enable-unicode-conversion,现在由多字节启用 (Tatsuo)
AIX 修复 (Tatsuo, Andreas)
修复并行进行 (Peter E)
安装 SQL 语言手册页到 OS 指定的目录 (Peter E)
重命名 config.h 为 pg_config.h (Peter E)
整理头文件的安装布局 (Peter E)
E.282.3.22. 源代码
删除 SEP_CHAR (Bruce)
新增 GUC hooks (Tom)
合并 GUC 和命令行处理 (Marko Kreen)
删除 EXTEND INDEX (Martijn van Oosterhout, Tom)
新增 pgjindent 到 java 代码缩进 (Bruce)
在 C++ 下编译时删除 true/false 的定义 (Leandro Fanzone, Tom)
pgindent 修复 (Bruce, Tom)
在适当的地方用 strcmp() 替换 strcasecmp() (Peter E)
改善 Dynahash 可移植性 (Tom)
在自旋锁结构中添加 'volatile' 用法
改善信号处理逻辑 (Tom)
E.282.3.23. 贡献包
新增 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)