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

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

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

E.292. 版本 7.0 #

发行日期:. 2000-05-08

此发行版包含许多领域的改进,展示了 PostgreSQL 的持续成长。7.0 的改进和修复比以往任何版本都多。开发者确信这是迄今最好的版本;我们尽力只发布扎实的版本,这个版本也不例外。

此发行版的主要变更:

Foreign Keys

外键现在已实现,PARTIAL MATCH 外键除外。许多用户一直要求此特性,我们很高兴提供它。

Optimizer Overhaul

延续一年前开始的工作,优化器得到改进,允许更好的查询计划选择,性能更快且内存使用更少。

Updated psql

我们的交互式终端监视器 psql 已更新,新增多种特性。详情见 psql 手册页。

Join Syntax

SQL92 连接语法现在受支持,但此版本只支持 INNER JOINJOINNATURAL JOINJOIN/USINGJOIN/ON 都可用,列相关名也可用。

E.292.1. 迁移到版本 7.0

希望从任何以前的 PostgreSQL 版本迁移数据的用户,需要使用 pg_dump 进行转储/恢复。对于从 6.5.* 升级的用户,可以改用 pg_upgrade 升级到此版本;但完整的转储/重装安装始终是最可靠的升级方法。

新版本需要考虑的接口和兼容性问题包括:

  • 日期/时间类型 datetimetimespan 已被 SQL92 定义的 timestampinterval 取代。虽然我们做了一些努力来简化过渡,允许 PostgreSQL 识别废弃的类型名并转换为新类型名,但这一机制对你的现有应用程序不可能是完全透明的。

  • 优化器在查询代价估计方面得到显著改进。在某些情况下,由于优化器为首选计划做出更好的选择,查询时间会缩短。但在少数情形下(通常涉及病态的数据分布),查询时间可能上升。如果你处理大量数据,可能想检查查询以验证性能。

  • JDBCODBC 接口已升级和扩展。

  • 字符串函数 CHAR_LENGTH 现在是原生函数。以前的版本把它转换为对 LENGTH 的调用,这可能与实现 LENGTH 的其他类型(如几何类型)产生歧义。

E.292.2. 变更

缺陷修复
---------
防止函数调用超过最大参数数量(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)
修复无行匹配 WHERE 时 SELECT COUNT(1) FROM table 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)
修复 AS 列与结果列匹配的 INSERT INTO ... SELECT
修复 INSERT ... SELECT ... GROUP BY 按目标列而非源列分组的问题(Tom)
修复带 INSERT 的 CREATE TABLE test (a char(5) DEFAULT text '', b int4)(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)

增强
------------
基于 SQL3/SQL98 的新 CLI 接口头文件 sqlcli.h
移除查询长度的所有限制,行长度限制仍存在(Tom)
把 jdbc 协议更新到 2.0(Jens Glaser )
添加 TRUNCATE 命令以快速截断关系(Mike Mascari)
修复以给超级用户和 createdb 用户适当的更新目录权限(Peter E)
允许 ecpg bool 变量具有 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)
第一个真正可用的 FOREIGN KEY 约束触发器功能(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 )
libpq 的 PQsetNoticeProcessor 函数现在返回先前的钩子(Peter E)
防止 PQsetNoticeProcessor 被设为 NULL(Peter E)
使 COPY 中的 USING 可选(Bruce)
允许目标列表中的子查询(Tom)
允许比较操作符左侧的子查询(Tom)
新并行回归测试(Jan)
更改后端侧 COPY 使写文件的权限为 644 而不是 666(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 打印为与 "" 不同的 [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)
含 NUL 字符大对象的 Perl 修复(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-only 查询中的 fsync(Vadim)
使索引创建使用 psort 代码,因为它现在更快(Tom)
允许创建 > 1GB 的排序临时表

源代码树变更
-------------------
修复 linux PPC 编译
新通用表达式树遍历子例程(Tom)
把 form() 改为 varargform() 以防止可移植性问题
改进 Alpha 上大整数的范围检查
清理 /include 目录中的 #include(Bruce)
添加检查 include 的脚本(Bruce)
从 *.c 文件移除不需要的 #include(Bruce)
更改 #include 以酌情使用 <> 和 ""(Bruce)
启用 libpq 的 Windows 编译
来自 Uncle George  的 Alpha 自旋锁修复
优化器数据结构的彻底改造(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 )
Alpha 编译修复
新多字节编码

提交更正

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