E.218. 版本 7.1

发布日期: 2001-04-13

这个版本集中在移去多年来存在于PostgreSQL里的限制。

这个版本的主要修改:

预写式日志

在发生操作系统崩溃的情况下维持数据库系统稳定,以前版本的 PostgreSQL 在每次事务提交之前强迫所有数据修改都冲刷到磁盘上。有了 WAL, 只有一个日志文件必须冲刷到磁盘上,极大地提高了性能。 如果你在以前的版本曾经使用 -F 来关闭磁盘冲刷,那么你可以考虑不再使用这个选项。

TOAST

TOAST - 以前的版本有一个内编译的行长度限制,通常是 8k - 32k。 这个限制令我们很难存储长的文本域。有了 TOAST,任意长度的行都可以以很好的性能存储。

外连接

我们现在支持外连接。用于外连接的 UNION/NOT IN 的绕开现在不再需要了。 我们使用 SQL92 外连接语法。

函数管理器

以前的 C 函数管理器无法正确处理 NULL,也不支持 64 位 CPU (Alpha)。 新的函数管理器可以实现这些任务。你仍然可以继续使用你的老的自定义函数, 但是你在将来可能会愿意为使用新的函数管理器调用接口改写它们。

复杂查询

大量以前版本不支持的复杂查询现在可以运转了。许多视图,聚集,UNION,LIMIT, 游标, 子查询,和继承表的组合现在可以正确工作了。继承的表现在缺省是访问的。现在支持在 FROM 里的子查询了。

E.218.1. 迁移到版本 7.1

如果需要从任何以前版本升级到这个版本,那么要求用 pg_dump 做转储/恢复工作。

E.218.2. 修改列表

bug 修复
---------
许多multibyte/Unicode/locale修复 (Tatsuo and others)
更可靠的ALTER TABLE RENAME (Tom)
Kerberos V 修复 (David Wragg)
修复了有子查询的目标列表的INSERT INTO...SELECT (Tom)
标准错误提示用户名/密码 (Tom)
修复了to_char(), to_date(), to_ascii(), 和 to_timestamp() (Karel,
   Daniel Baldoni)
阻止查询表达式内存泄露 (Tom)
允许 UPDATE 数组元素 (Tom)
在取消时唤醒锁等待 (Hiroshi)
当使用哈希连接时修复极少情况的游标崩溃 (Tom)
在回滚的事务中修复 DROP TABLE/INDEX (Hiroshi)
如果启用了 MULTIBYTE,修复 psql 的 \l+ 崩溃 (Peter E)
修复在 CREATE VIEW 运行时的规则名截断 (Ross Reedstrom)
修复PL/perl (Alex Kapranoff)
不允许 LOCK 视图 (Mark Hollomon)
不允许在视图上 INSERT/UPDATE/DELETE (Mark Hollomon)
不允许在视图上 DROP RULE, CREATE INDEX, TRUNCATE (Mark Hollomon)
允许 PL/pgSQL 接受非ASCII标识符 (Tatsuo)
允许视图适当处理 GROUP BY, aggregates, DISTINCT (Tom)
修复 TRUNCATE 命令极少的失败 (Tom)
允许 ALL,子查询,视图,DISTINCT, ORDER BY, SELECT...INTO 使用 UNION/INTERSECT/EXCEPT (Tom)
修复在中止事务期间的解析器错误 (Tom)
允许临时关系适当的清理索引 (Bruce)
在同一页中移动行以修复 VACUUM 问题 (Tom)
修改 pg_dump 以更好的处理在 template1 中用户定义的条目 (Philip)
允许在视图中使用 LIMIT (Tom)
要求游标准确的 FETCH LIMIT (Tom)
允许在非继承的字段上定义 PRIMARY/FOREIGN 键 (Stephan)
允许在子查询中 ORDER BY, LIMI (Tom)
允许在 CREATE RULE 中使用 UNION (Tom)
使 ALTER/DROP TABLE 可回滚 (Vadim, Tom)
在 pg_control 中存储 initdb 校对,这样校对不能被改变 (Tom)
用规则修复 INSERT...SELECT (Tom)
修复视图内的 FOR UPDATE 和子查询 (Tom)
按照 SQL92 规则修复关于 NULL 的 OVERLAPS 操作符 (Tom)
修复 lpad() 和 rpad() 以处理长度小于输入字符串的情况 (Tom)
修复 NOTIFY 在一些规则中的使用 (Tom)
详细检查 btree 代码 (Tom)
用 Pl/pgSQL 变量修复 NOT NULL 的使用 (Tom)
详细检查 GIST 代码 (Oleg)
修复 CLUSTER 以保持约束和缺省字段 (Tom)
改进了死锁检测处理 (Tom)
在一个表中允许多个 SERIAL 字段 (Tom)
阻止偶然的索引损坏 (Vadim)

增强
------------
添加 OUTER JOINs (Tom)
彻底检查函数管理 (Tom)
允许在索引上 ALTER TABLE RENAME (Tom)
改善 CLUSTER (Tom)
为更多平台改善 ps 状态显示 (Peter E, Marc)
改善 CREATE FUNCTION 失败信息 (Ross)
JDBC 改进 (Peter, Travis Bauer, Christopher Cain, William Webber,
   Gunnar)
重要的统一配置模式/GUC。许多选项现在可以在 data/postgresql.conf,
postmaster/postgres 标识,或 SET 命令中设置 (Peter E)
改善文件描述符缓存的处理 (Tom)
新增关于自动创建表别名的警告代码 (Bruce)
详细检查 initdb  进程 (Tom, Peter E)
详细检查继承的表;继承的表现在缺省是可访问的;新增 ONLY 关键字阻止对它的访问 (Chris Bitmead, Tom)
ODBC 清理/改善 (Nick Gorham, Stephan Szabo, Zoltan Kovacs,
   Michael Fork)
允许重命名临时表 (Tom)
详细检查内存管理环境 (Tom)
pg_dumpall 使用 CREATE USER 或 CREATE GROUP 而不是 COPY (Peter E)
详细检查 pg_dump (Philip Warner)
允许 pg_hba.conf 次要的口令文件只指定用户名 (Peter E)
在创建临时表时允许 TEMPORARY 或 TEMP 关键字 (Bruce)
新增内存泄露检查器 (Karel)
新增 SET SESSION CHARACTERISTICS (Thomas)
允许嵌套的块注释 (Thomas)
添加 WITHOUT TIME ZONE 类型限定符 (Thomas)
新增 ALTER TABLE ADD CONSTRAINT (Stephan)
为 INTEGER 聚集使用 NUMERIC 累加器 (Tom) 
详细检查聚集代码 (Tom)
新增 VARIANCE 和 STDDEV() 聚集
改善 pg_dump 的依赖顺序 (Philip)
新增 pg_restore 命令 (Philip)
新增 pg_dump tar 输出选项 (Philip)
新增大对象的 pg_dump (Philip)
新增 ESCAPE 选项到 LIKE (Thomas)
新增大小写敏感的  LIKE - ILIKE (Thomas)
允许功能索引使用二进制兼容的类型 (Tom)
允许 SQL 函数在更多的环境中使用 (Tom)
新增 pg_config 工具 (Peter E)
新增 PL/pgSQL EXECUTE 命令,允许动态 SQL 和工具语句 (Jan) 
为 SPI 值访问新增 PL/pgSQL GET DIAGNOSTICS 语句 (Jan)
新增 quote_identifiers() 和 quote_literal() 函数 (Jan)
新增 New ALTER TABLE table OWNER 到 user command (Mark Hollomon)
在 FROM 中允许子查询,如 FROM (SELECT ...) [AS] alias (Tom)
更新 PyGreSQL 到版本 3.1 (D'Arcy)
存储表为 OID 命名的文件 (Vadim)
新增 SQL 函数 setval(seq,val,bool) 适用于 pg_dump (Philip)
要求 DROP VIEW 删除视图,而不是 DROP TABLE (Mark)
允许 DROP VIEW view1, view2 (Mark)
在 DROP INDEX, DROP RULE, 和 DROP TYPE 中允许多个对象 (Tom)
允许自动转换到/从 Unicode (Tatsuo, Eiji)
新增 /contrib/pgcrypto 哈希函数 (Marko Kreen)
新增 pg_dumpall --globals-only 选项 (Peter E)
为创建新的 WAL 日志文件的 WAL 新增 CHECKPOINT 命令 (Vadim)
新增 AT TIME ZONE 语法 (Thomas)
允许配置 Unix 域套接字的位置 (David J. MacKenzie)
允许主进程监听一个特殊的 IP 地址 (David J. MacKenzie)
允许通过前导斜线以主机名指定套接字路径名 (David J. MacKenzie)
允许 CREATE DATABASE 指定临时数据库 (Tom)
新增工具以转换 MySQL 模式转储为 SQL92 和 PostgreSQL (Thomas)
新增 /contrib/rserv 复制工具包 (Vadim)
为  COPY BINARY 新增文件格式 (Tom)
新增 /contrib/oid2name 以映射数值文件到表名 (B Palmer)
新增 "idle in transaction" ps 状态信息 (Marc)
更新到 pgaccess 0.98.7 (Constantin Teodorescu)
pg_ctl 在关闭时现在缺省为 -w (wait) , 新增 -l (log) 选项
添加基本的依赖约束到 pg_dump (Philip)

类型
-----
修复 INET/CIDR 类型排序和添加新的函数 (Tom)
使 OID 表现为一个无符号的类型 (Tom)
允许 BIGINT  作为 INT8 的同义词 (Peter E)
新增 int2 和 int8 比较运算符 (Tom)
新增 BIT 和 BIT VARYING 类型 (Adriaan Joubert, Tom, Peter E)
CHAR()  因为 TOAST 而不再比 VARCHAR() 快 (Tom)
新增 GIST seg/cube 示例 (Gene Selkov)
改进 round(numeric) 处理 (Tom)
修复 CIDR 输出格式 (Tom)
新增 CIDR abbrev() 函数 (Tom) 

性能
-----------
预写式日志(WAL)提供崩溃恢复,用较少的性能开销 (Vadim)
ANALYZE VACUUM 的阶段不再只锁住表 (Bruce)
减少文件搜索 (Denis Perchine)
为复制键改善 BTREE 代码 (Tom)
在一个单独的表中存储所有的大对象 (Denis Perchine, Tom)
改善内存分配性能 (Karel, Tom) 

源码
-----------
新增函数管理调用约定 (Tom)
SGI 可移植性修复 (David Kaelbling)
新增 configure --enable-syslog 选项 (Peter E)
新增 BSDI README (Bruce)
配置脚本移动到顶级,而不是 /src (Peter E)
新增 configure --with-python 选项 (Peter E)
Solaris 清理 (Peter E)
详细检查 /contrib Makefiles (Karel)
新增 OpenSSL 配置选项 (Magnus, Peter E)
AIX 修复 (Andreas)
QNX 修复 (Maurizio)
新增 heap_open(), heap_openr() API (Tom)
删除 colon 和 semi-colon 运算符 (Thomas)
为视图新增 pg_class.relkind 值  (Mark Hollomon)
重命名 ichar() 为 chr() (Karel)
新增文件 btrim(), ascii(), chr(), repeat() (Karel)
修复 NT/Cygwin (Pete Forman)
AIX 端口 修复 (Andreas) 
新增 BeOS 端口 (David Reid, Cyril Velter)
添加校对员的更改到文档 (Addison-Wesley, Bruce)
新增 Alpha 自旋锁代码 (Adriaan Joubert, Compaq)
详细检查 UnixWare 端口 (Peter E)
新增 Darwin/Mac OS X 端口 (Peter Bierman, Bruce Hartzler)
新增 FreeBSD Alpha 端口 (Alfred)
详细检查共享内存段 (Tom)
新增 IBM S/390 支持 (Neale Ferguson)
移动 macmanuf 到 /contrib (Larry Rosenman) 
Syslog 改善 (Larry Rosenman)
新增不包含用户附加的 template0 数据库 (Tom)
新增 /contrib/cube 和 /contrib/seg GIST 示例代码 (Gene Selkov)
允许 NetBSD 的 libedit 而不是 readline (Peter)
改善汇编语言源代码格式 (Bruce)
新增 contrib/pg_logger
新增 --template 选项到 createdb
新增 contrib/pg_control 工具 (Oliver)
新增 FreeBSD 工具 ipc_check, start-scripts/freebsd