pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发布于 2000-05-08。 此发行版包含许多方面的改进,展示了 PostgreSQL 的持续成长。7.0 中的改进和修复比以往任何发行版都多。开发者们相信这是 迄今最好的发行版;我们尽力只发布稳固的发行版,这一版也不例外。
此发行版的主要变更:
外键现已实现,PARTIAL MATCH 外键除外。许多用户一直在请求这一特性, 我们很高兴能提供它。
延续一年前开始的工作,优化器得到了改进,能够更好地选择查询计划, 性能更快且内存使用更少。
我们的交互式终端监视器 psql 已经更新, 增加了多种新特性。详情参见 psql 手册页。
现在支持 SQL92 连接语法,不过此发行版中仅支持 INNER JOIN。JOIN、NATURAL JOIN、 JOIN/USING 和 JOIN/ON 都可用,列相关名也可用。
在 7.1 或 7.2 中,我们计划提供外连接、超长行的存储以及预写日志系统。
希望从任何以前的 Postgres 发行版迁移 数据的用户,需要使用 pg_dump 进行转储/ 恢复。对于从 6.5.* 升级的用户,也可以改用 pg_upgrade 升级到此发行版;不过,完整的 转储/重载安装始终是升级最稳健的方法。
新发行版需要考虑的接口和兼容性问题包括:
日期/时间类型 datetime 和 timespan 已被 SQL92 定义的类型 timestamp 和 interval 取代。尽管已经做了一些工作来简化过渡 —— 允许 Postgres 识别已废弃的类型名并将它们 转换为新类型名 —— 但这一机制对你现有的应用程序可能无法完全透明。
优化器在查询代价估算方面得到了实质性改进。在某些情况下,由于 优化器为首选计划做出了更好的选择,查询时间会缩短。但是,在少数 情况下(通常涉及病态的数据分布),你的查询时间可能上升。如果你 处理大量数据,可能需要检查你的查询以验证性能。
JDBC 和 ODBC 接口已升级并 扩展。
字符串函数 CHAR_LENGTH 现在是原生函数。以前 的版本将它转换为对 LENGTH 的调用,这可能与 其他实现 LENGTH 的类型(例如几何类型)产生 歧义。
缺陷修复
---------
防止函数调用超出参数数量上限(Tom)
改进 CASE 结构(Tom)
修复 SELECT coalesce(f1,0) FROM int4_tbl GROUP BY f1(Tom)
修复 SELECT sentence.words[0] FROM sentence GROUP BY sentence.words[0](Tom)
修复 GROUP BY 扫描缺陷(Tom)
SQL 语法处理的改进(Tom)
修复涉及 INSERT ... SELECT ... 的视图的问题(Tom)
修复 SELECT a/2, a/2 FROM test_missing_target GROUP BY a/2(Tom)
修复 INSERT ... SELECT 中的子选择(Tom)
禁止 INSERT ... SELECT ... ORDER BY(Tom)
修复大于 2GB 的关系(包括 vacuum)的问题
改进系统表变更向其他后端的传播(Tom)
改进用户表变更向其他后端的传播(Tom)
修复复杂情况下临时表的处理(Bruce、Tom)
允许在表打开时锁定表,改进并发可靠性(Tom)
在 pg_dump 中正确为序列名加引号(Ross J. Reedstrom)
防止他人正在访问时 DROP DATABASE
防止 GROUP BY 未处理任何行时返回行(Tom)
修复 'SELECT COUNT(1) FROM table WHERE ...'(无匹配 WHERE 的行时)(Tom)
修复 pg_upgrade 使其适用于 MVCC(Tom)
修复 SELECT ... WHERE x IN (SELECT ... HAVING SUM(x) > 1)(Tom)
修复 "f1 datetime DEFAULT 'now'"(Tom)
修复 DEFAULT 中使用 CURRENT_DATE 的问题(Tom)
允许纯注释行,以及 ;;; 行。(Tom)
改进磁盘写入失败、磁盘满之后的恢复(Hiroshi)
修复表在 FROM 中提到但未连接的情况(Tom)
允许不带聚合函数的 HAVING 子句(Tom)
修复 "--" 注释且无末尾换行的问题,如 perl 接口中所见
改进 pg_dump 失败错误报告(Bruce)
允许排序和哈希超过 2GB 文件大小(Tom)
修复 pg_dump 转储继承规则的问题(Tom)
修复 NULL 处理比较的问题(Tom)
修复失败的 CREATE/DROP 命令导致的不一致状态(Hiroshi)
修复带连字符的数据库名
防止 DROP INDEX 干扰其他后端(Tom)
修复 verify_password() 中的文件描述符泄漏
修复 "Unable to identify an operator =$" 问题
修复 ODBC,使得启用 CommLog 和 Debug 时不再段错误(Dirk Niggemann)
修复递归 exit 调用(Massimo)
修复超长时区的问题(Jeroen van Vianen)
使 pg_dump 保留主键信息(Peter E)
防止带单引号的数据库名(Peter E)
禁止在事务内 DROP DATABASE(Peter E)
ecpg 内存泄漏修复(Stephen Birch)
修复 SELECT null::text、SELECT int4fac(null) 和 SELECT 2 + (null)(Tom)
Y2K 时间戳修复(Massimo)
修复 VACUUM 的 'HEAP_MOVED_IN was not expected' 错误(Tom)
修复带空格表/列的视图的问题(Tom)
禁止对索引授权(Peter E)
修复出错时自旋锁卡住的问题(Hiroshi)
修复 Linux 上的 ipcclean
修复 NULL 约束条件的处理(Tom)
修复 odbc 驱动中的内存泄漏(Nick Gorham)
修复 UNION 表上的权限检查(Tom)
修复以允许 SELECT 'a' LIKE 'a'(Tom)
修复 SELECT 1 + NULL(Tom)
CHAR 的若干修复
修复 numeric 类型的 log()(Tom)
废弃 ':' 和 ';' 操作符
允许清理临时表
禁止与新列同名的继承列
磁盘空间耗尽时恢复或强制失败(Hiroshi)
修复 INSERT INTO ... SELECT 中 AS 列与结果列匹配的问题
修复 INSERT ... SELECT ... GROUP BY 按目标列而不是源列分组的问题(Tom)
修复 CREATE TABLE test (a char(5) DEFAULT text '', b int4) 与 INSERT(Tom)
修复带 LIMIT 的 UNION
修复 CREATE TABLE x AS SELECT 1 UNION SELECT 2
修复 CREATE TABLE test(col char(2) DEFAULT user)
修复 CREATE TABLE ... DEFAULT 中类型不匹配的问题
修复 SELECT * FROM pg_class where oid in (0,-1)
修复 SELECT COUNT('asdf') FROM pg_class WHERE oid=12
防止能创建数据库的用户修改 pg_database 表(Peter E)
修复 btree,当键 > 1/2(页 - 开销)时给出有用的 elog(Tom)
修复向 DECIMAL(4,4) 字段插入 0.0 的问题(Tom)
增强
------------
新的 CLI 接口头文件 sqlcli.h,基于 SQL3/SQL98
移除查询长度的所有限制,行长度限制仍存在(Tom)
将 jdbc 协议更新到 2.0(Jens Glaser <jens@jens.de>)
添加 TRUNCATE 命令以快速截断关系(Mike Mascari)
修复以赋予超级用户和 createdb 用户正确的目录更新权限(Peter E)
允许 ecpg 布尔变量取 NULL 值(Christof)
当无 NULL 指示符的变量取 NULL 值时发出 ecpg 错误(Christof)
允许用 ^C 取消 COPY 命令(Massimo)
添加 SET FSYNC 和 SHOW PG_OPTIONS 命令(Massimo)
动态加载 C 函数的函数名重载(Frankpitt)
向 libpq++ 添加 CmdTuples()(Vince)
新的 CREATE CONSTRAINT TRIGGER 和 SET CONSTRAINTS 命令(Jan)
允许 CREATE FUNCTION/WITH 子句用于所有语言类型
configure --enable-debug 添加 -g(Peter E)
configure --disable-debug 移除 -g(Peter E)
允许更复杂的默认表达式(Tom)
第一个真正可用的外键约束触发器功能(Jan)
添加 FOREIGN KEY ... MATCH FULL ... ON DELETE CASCADE(Jan)
添加 FOREIGN KEY ... MATCH <unspecified> 引用动作(Don Baccus)
允许对 ctid(物理堆位置)使用 WHERE 限制(Hiroshi)
将 pginterface 从 contrib 移到 interface 目录并更名为 pgeasy(Bruce)
更改 pgeasy connectdb() 的参数顺序(Bruce)
要求 SELECT DISTINCT 目标列表包含所有 ORDER BY 列(Tom)
添加 Oracle 的 COMMENT ON 命令(Mike Mascari <mascarim@yahoo.com>)
libpq 的 PQsetNoticeProcessor 函数现在返回之前的钩子(Peter E)
防止 PQsetNoticeProcessor 被设置为 NULL(Peter E)
使 COPY 中的 USING 变为可选(Bruce)
允许目标列表中的子选择(Tom)
允许比较操作符左侧的子选择(Tom)
新的并行回归测试(Jan)
将后端侧 COPY 写文件的权限从 666 改为 644(Tom)
即使 PGDATA 目录已存在也强制其权限安全(Tom)
添加 psql LASTOID 变量以返回最后插入的 oid(Peter E)
允许并发 vacuum 并移除 pg_vlock vacuum 锁文件(Tom)
为 vacuum 添加权限检查(Peter E)
libpq 新函数支持异步连接:PQconnectStart()、
PQconnectPoll()、PQresetStart()、PQresetPoll()、PQsetenvStart()、
PQsetenvPoll()、PQsetenvAbort(Ewan Mellor)
新的 libpq PQsetenv() 函数(Ewan Mellor)
create/alter user 扩展(Peter E)
$PGDATA 下新的 postmaster.pid 和 postmaster.opts(Tatsuo)
用于 create/drop user/db 的新脚本(Peter E)
psql 全面翻修(Peter E)
向 libpq 接口添加 const(Peter E)
新的 libpq 函数 PQoidValue(Peter E)
显示导致 GROUP BY 问题的特定非聚合(Tom)
使对 pg_shadow 的更改重建 pg_pwd 文件(Peter E)
添加 aggregate(DISTINCT ...)(Tom)
允许用标志控制 NULL 的 COPY 输入/输出(Peter E)
使 postgres 用户默认有口令(Peter E)
添加 CREATE/ALTER/DROP GROUP(Peter E)
所有管理脚本现在支持 --long 选项(Peter E、Karel)
Vacuumdb 脚本现在支持 --all 选项(Peter E)
ecpg 新的可移植 FETCH 语法
添加 ecpg 的 EXEC SQL IFDEF、EXEC SQL IFNDEF、EXEC SQL ELSE、EXEC SQL ELIF
和 EXEC SQL ENDIF 指令
添加 pg_ctl 脚本以控制后端启动(Tatsuo)
添加 postmaster.opts.default 文件以存储启动标志(Tatsuo)
允许 --with-mb=SQL_ASCII
将索引键最大数量增加到 16(Bruce)
将函数参数最大数量增加到 16(Bruce)
允许配置索引键和参数的最大数量(Bruce)
允许无特权用户更改自己的口令(Peter E)
启用口令认证;新用户必需(Peter E)
禁止删除拥有数据库的用户(Peter E)
将 initdb 选项 --with-mb 改为 --enable-multibyte
为 initdb 添加提示输入超级用户口令的选项(Peter E)
允许复杂类型转换,如 col::numeric(9,2) 和 col::int2::float8(Tom)
更新 initdb、initlocation、pg_dump、ipcclean 的用户界面(Peter E)
新的 pg_char_to_encoding() 和 pg_encoding_to_char() 函数(Tatsuo)
libpq 非阻塞模式(Alfred Perlstein)
改进未指定长度的类型转换中的类型转换
新的 plperl 内部编程语言(Mark Hollomon)
允许 COPY IN 读取不以换行结尾的文件(Tom)
指示长标识符何时被截断(Tom)
允许聚合使用类型等价(Peter E)
添加 Oracle 的 to_char()、to_date()、to_datetime()、to_timestamp()、to_number()
转换函数(Karel Zak <zakkr@zf.jcu.cz>)
添加 SELECT DISTINCT ON (expr [, expr ...]) targetlist ...(Tom)
检查以确保 ORDER BY 与 DISTINCT 操作兼容(Tom)
向 ODBC 添加 NUMERIC 和 int8 类型
改进 Append、Group、Agg、Unique 的 EXPLAIN 结果(Tom)
添加 ALTER TABLE ... ADD FOREIGN KEY(Stephan Szabo)
允许在 PL/pgSQL 中使用 SELECT .. FOR UPDATE(Hiroshi)
即使到达 EOF 也启用反向顺序扫描(Hiroshi)
添加布尔值的 btree 索引,>= 和 <=(Don Baccus)
COPY FROM 失败时打印当前行号(Massimo)
识别 POSIX 时区,例如 "PST+8" 和 "GMT-8"(Thomas)
添加 DEC 作为 DECIMAL 的同义词(Thomas)
添加 SESSION_USER 作为 SQL92 关键字,同 CURRENT_USER(Thomas)
实现 SQL92 列别名(又称相关名)(Thomas)
实现 SQL92 连接语法(Thomas)
使保留字 INTERVAL 可用作列标识符(Thomas)
实现 REINDEX 命令(Hiroshi)
接受聚合函数 SUM(ALL col) 中的 ALL(Tom)
防止 GROUP BY 使用列别名(Tom)
新的 psql \encoding 选项(Tatsuo)
允许 PQrequestCancel() 在等待锁状态下终止(Hiroshi)
允许在所有情况下对负数取负
添加 ecpg 描述符(Christof、Michael)
允许 CREATE VIEW v AS SELECT f1::char(8) FROM tbl
允许带长度的转换,如 foo::char(8)
新的 libpq 函数 PQsetClientEncoding()、PQclientEncoding()(Tatsuo)
添加对 SJIS 用户定义字符的支持(Tatsuo)
支持更大的视图/规则
使 libpq 的 PQconndefaults() 线程安全(Tom)
禁用 // 作为注释以符合 ANSI,应使用 --(Tom)
允许视图上的列别名 CREATE VIEW name (collist)
修复带子查询的视图的问题(Tom)
允许 UPDATE table SET fld = (SELECT ...)(Tom)
SET 命令选项不再需要引号
将 pgaccess 更新到 0.98.6
新的 SET SEED 命令
新的 pg_options.sample 文件
新的 SET FSYNC 命令(Massimo)
允许创建表时使用 pg_descriptions
允许创建类型、列和函数时使用 pg_descriptions
允许 psql \copy 使用分隔符(Peter E)
允许 psql 将空值打印为与 "" 不同的 [null](Peter E)
类型
-----
大量数组修复(Tom)
允许裸列名作为数组下标使用(Tom)
改进 int 和 float 常量的类型转换(Tom)
int8 输入、范围检查和类型转换的清理(Tom)
修复 SELECT timespan('21:11:26'::time)(Tom)
netmask('x.x.x.x/0') 现在是 255.255.255.255 而不是 0.0.0.0(Oleg Sharoiko)
在 NUMERIC 上添加 btree 索引(Jan)
Perl 修复包含 NUL 字符的大对象(Douglas Thomson)
ODBC 大对象修复(free)
修复 cidr 数据类型的索引
修复以太网 MAC 地址(macaddr 类型)比较的问题
修复计算中发生溢出时日期/时间类型的问题(Tom)
允许 int8 数组(Peter E)
修复 NUMERIC 类型的舍入/溢出,如 NUMERIC(4,4)(Tom)
允许 NUMERIC 数组
修复 NUMERIC ceil() 和 floor() 函数中的缺陷(Tom)
使 char_length()/octet_length 包含尾部空格(Tom)
使 abstime/reltime 使用 int4 而不是 time_t(Peter E)
新的 lztext 数据类型用于压缩文本字段
修订处理 int 和 float 常量转换的代码(Tom)
开始编写实现 BIT 和 BIT VARYING 类型的新代码(Adriaan Joubert)
NUMERIC 现在接受科学记数法(Tom)
NUMERIC 到 int4 进行舍入(Tom)
正确地将 float4/8 转换为 NUMERIC(Tom)
允许与 NUMERIC 的类型转换(Thomas)
使 ISO 日期样式(2000-02-16 09:33)成为默认(Thomas)
添加 NATIONAL CHAR [ VARYING ](Thomas)
允许 NUMERIC 的 round 和 trunc 接受负标度(Tom)
新的 TIME WITH TIME ZONE 类型(Thomas)
在 time 类型上添加 MAX()/MIN()(Thomas)
为 int8 添加 abs()、mod()、fac()(Thomas)
将 float8 的函数更名为 round()、sqrt()、cbrt()、pow()(Thomas)
为 float8 添加超越数学函数(如 sin()、acos())(Thomas)
为 NUMERIC 类型添加 exp() 和 ln()
将 NUMERIC 的 power() 更名为 pow()(Thomas)
改进的 TRANSLATE() 函数(Edwin Ramirez、Tom)
允许 X=-Y 操作符(Tom)
允许 SELECT float8(COUNT(*))/(SELECT COUNT(*) FROM t) FROM t GROUP BY f1;(Tom)
允许 LOCALE 在正则表达式搜索中使用索引(Tom)
允许创建函数索引时使用默认类型
性能
-----------
防止大量 AND 和 OR 导致的指数级空间消耗(Tom)
为系统列收集属性选择率值(Tom)
减少聚合的内存使用(Tom)
修复 LIKE 优化以在多字节编码下使用索引(Tom)
修复 r-tree 索引优化器选择率(Thomas)
改进优化器选择率计算和函数(Tom)
优化存在许多相等键时的 btree 搜索(Tom)
仅在存在索引时启用快速 LIKE 索引处理(Tom)
重用索引页上重复项的空闲空间(Tom)
改进哈希连接处理(Tom)
防止结果已排序时降序排序(Hiroshi)
允许索引扫描查询条件的交换(Tom)
在需要 ORDER BY/GROUP BY 的情况下优先使用索引扫描(Tom)
为提升性能,以固定大小的块分配大内存请求(Tom)
通过减少内存分配请求改进 vacuum 的性能(Tom)
实现常量表达式化简(Bernard Frankpitt、Tom)
使用次要列确定索引扫描的起点(Hiroshi)
防止内部排序时四倍占用磁盘空间(Tom)
通过调用更少的函数加快排序(Tom)
创建系统索引以匹配所有系统缓存(Bruce、Hiroshi)
使系统缓存使用系统索引(Bruce)
使所有系统索引唯一(Bruce)
改进 pg_statistics 管理以提升 VACUUM 速度(Tom)
降低后端缓存刷新频率(Tom、Hiroshi)
COPY 现在重用先前的内存分配,改进性能(Tom)
改进优化代价估算(Tom)
改进优化器对范围查询 x > lowbound AND x < highbound 的估计(Tom)
在适当处使用 DNF 而不是 CNF(Tom、Taral)
对 OR-of-AND WHERE 子句的进一步清理(Tom)
在 OR 子句中使用索引 (x = 1 AND y = 2) OR (x = 2 AND y = 4)(Tom)
对随机索引页访问的更智能优化器计算(Tom)
新的 SET 变量以控制优化器代价(Tom)
基于 LIMIT、OFFSET 和 EXISTS 条件优化查询(Tom)
减少优化器对连接路径的内部管理以加速(Tom)
子查询的重大加速(Tom)
fsync 未禁用时更少的 fsync 写(Tom)
改进的 LIKE 优化器估计(Tom)
防止仅 SELECT 查询中的 fsync(Vadim)
使索引创建使用 psort 代码,因为它现在更快(Tom)
允许创建大于 1 Gig 的排序临时表
源代码树变更
-------------------
修复 linux PPC 编译
新的通用表达式树遍历子例程(Tom)
将 form() 改为 varargform() 以防止可移植性问题
改进 Alpha 上大整数的范围检查
清理 /include 目录中的 #include(Bruce)
添加检查 include 的脚本(Bruce)
从 *.c 文件中移除不需要的 #include(Bruce)
酌情将 #include 改为使用 <> 和 ""(Bruce)
启用 libpq 的 Windows 编译
来自 Uncle George 的 Alpha 自旋锁修复 <gatgul@voicenet.com>
优化器数据结构的全面翻修(Tom)
cygipc 库的修复(Yutaka Tanida)
允许 pgsql 在较新的 Cygwin 快照上工作(Dan)
新的目录版本号(Tom)
添加 Linux ARM
将 heap_replace 更名为 heap_update
为 QNX 更新(Dr. Andreas Kardos)
新的平台特定回归处理(Tom)
将 oid8 更名为 oidvector,int28 更名为 int2vector(Bruce)
将所有 yacc 和 lex 文件纳入发行版(Peter E.)
移除不再需要的 lextest(Peter E)
修复 Windows 上的 libpq 和 psql(Magnus)
内部将 datetime 和 timespan 更改为 timestamp 和 interval(Thomas)
修复 BSD/OS 上的 plpgsql
向回归测试添加 SQL_ASCII 测试用例(Tatsuo)
configure --with-mb 现已废弃(Tatsuo)
NT 修复
NetBSD 修复(Johnny C. Lam <lamj@stat.cmu.edu>)
Alpha 编译的修复
新的多字节编码
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。