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

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

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

E.302. 版本 6.3 #

发行日期:. 1998-03-01

此版本有许多新特性和改进。以下是简要而不完整的总结:

  • 许多新的 SQL 特性,包括完整的 SQL92 子查询能力 (只缺目标列表子查询,其余一切都有了)。

  • 支持用客户端环境变量指定时区和日期样式。

  • 客户端/服务器连接的套接字接口。现在这是默认,所以你可能需要用 -i 标志启动 postmaster

  • 更好的口令授权机制。默认表权限已更改。

  • 旧式时间旅行已被移除。性能得到改进。

注意

Bruce Momjian 写了以下说明来介绍新版本。

我想提一些 6.3 的普遍问题。这里只是一句话说不完的大项。关于全部特性列表,请参阅发行说明末尾的详细变更列表。

首先,我们现在有了子查询。既然有了它们,我想指出:没有子查询的 SQL 是一种非常受限的语言。子查询是绝大多数严肃的商业应用所必需的,我们终于在特性列表中勾掉了它。我们对此特别自豪,因为这一代码里程碑意味着 PostgreSQL 的查询处理器现在完全准备就绪。注意,外部连接现在可以使用子查询语法实现。我们准备了一个脚本在 contrib 目录中来做这件事,它会把 UNION 连接重写为子查询。

其次,6.3 默认使用 Unix 域套接字而不是 TCP/IP。要 启用来自其他机器的连接,必须使用新的 postmaster -i 选项,当然还要编辑 pg_hba.conf。此外,由于这个 原因,pg_hba.conf 的格式已经更改。

第三,char() 字段现在允许比 varchar()text 更快的访问。具体来说,textvarchar() 在访问该类型第一列之后的 任何列时有性能损失。char() 过去也有这种 访问损失,但现在没有了。这可能提示你 重新设计一些表,特别是如果你有定义为 varchar()text 的短字符 列。这项和其他变更使 6.3 比以前的版本更快。

我们现在可以独立于任何 Unix 文件定义口令。有新的 SQL USER 命令。更多信息见 管理员指南。还有一个新表 pg_shadow,用于存储 用户信息和用户口令,默认只有 postgres 超级用户可以 SELECT。pg_user 现在是 pg_shadow 的视图,可被 PUBLIC SELECT。你的应用程序应继续使用 pg_user 而无需更改。

用户创建的表现在默认不再对 PUBLIC 授予 SELECT 权限。这样做是因为 ANSI 标准要求这样做。如果需要,你可以通过 GRANT 语句更改这些权限。

我们还有真正的死锁检测代码。不再有六十秒超时。新的锁定代码实现了 SQL2 事务隔离级别。

以前的版本中有很多关于文档不足的抱怨。Thomas 在许多新文档上投入了大量精力。包括新的数据库管理员指南、入门指南、程序员指南和教程。文档树的 v6.3 版本有 8.6MB,而这个版本的文档源有 7.2MB。

出于性能原因,时间旅行已被移除,但可以 用触发器实现(参见 pgsql/contrib/spi/README)。请查看新的 \d 命令以了解类型、操作符等。此外,视图现在有自己的 权限,不再基于底层表,因此必须单独设置视图的 权限。查看 /pgsql/interfaces 了解与 PostgreSQL 交互的一些新方式。

这是第一个真正需要为现有用户做解释的版本。在许多方面,这是必要的,因为版本 6.3 为很多问题提供了最终的解决方案,这些问题以前只能通过低效的变通方法处理。这是强烈建议的升级;它包含许多重要的新特性和对现有特性的修复。

E.302.1. 迁移到版本 6.3

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

E.302.2. 变更

缺陷修复
---------
修复被 MOVE 实现破坏的二进制游标(Vadim)
修复 tcl 库崩溃(Jan)
修复数组处理的问题,来自 Gerhard Hintermayer
修复 acl 错误并移除重复的 pqtrace(Bruce)
修复 psql \e 对空文件的问题(Bruce)
修复 varchar() 字段上的 textcat(Bruce)
修复 DBT Sendproc(Zeugswetter Andres)
修复 vacuum analyze 语法问题(Bruce)
修复国际标识符的问题(Tatsuo)
修复继承表上的聚合(Bruce)
修复 substr() 的越界数据问题
修复 select 1=1 or 2=2、select 1=1 and 2=2 和 select sum(2+2)(Bruce)
修复无 tty 输出以显示状态结果。-q 选项仍会关闭它(Bruce)
修复 count(*)、带视图和多表的聚合以及 sum(3)(Bruce)
修复 cluster(Bruce)
修复 PQtrace 多次启动/停止的问题(Bruce)
修复各种锁定问题,如较新的锁等待者先于较旧者
       获得锁、写者等待锁时读者不共享锁、等待的写者
       没有优先于等待的读者(Bruce)
修复从外部文件执行查询时 psql 的崩溃(James)
修复多列 order by 且第一列含 NULL 值的问题(Jeroen)
为 float8 和 int4 使用正确的哈希表支持函数(Thomas)
重新启用 CREATE OPERATOR 语句中的 JOIN= 选项(Thomas)
更改布尔操作符的优先级以符合预期行为(Thomas)
对过大整数生成 elog(ERROR)(Bruce)
允许约束子句中的多参数函数(Thomas)
检查布尔输入字面量 'true'、'false'、'yes'、'no'、'1'、'0',
       无法识别时抛出 elog(ERROR)(Thomas)
重要的大对象修复
修复 GROUP BY 显示重复项的问题(Vadim)
修复 MergeJoin 中的索引扫描(Vadim)

增强
------------
带 EXISTS、IN、ALL、ANY 关键字的子查询(Vadim、Bruce、Thomas)
新用户手册(Thomas 等)
通过内联一些频繁调用的函数提速
真正的死锁检测,不再超时(Bruce)
添加 SQL92 "常量" CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、
       CURRENT_USER(Thomas)
修改约束语法以符合 SQL92(Thomas)
用索引实现 SQL92 PRIMARY KEY 和 UNIQUE 子句(Thomas)
识别 FOREIGN KEY 的 SQL92 语法。抛出 elog 通知(Thomas)
允许 NOT NULL UNIQUE 约束子句(以前各自单独允许)(Thomas)
允许非常量的 PostgreSQL 风格转换("::")(Thomas)
添加对 SQL3 TRUE 和 FALSE 布尔常量的支持(Thomas)
支持 IS TRUE/IS FALSE/IS NOT TRUE/IS NOT FALSE 的 SQL92 语法(Thomas)
允许更短的布尔字面量字符串(如 "t"、"tr"、"tru")(Thomas)
允许 SQL92 分隔标识符(Thomas)
实现 SQL92 二进制和十六进制字符串解码(b'10' 和 x'1F')(Thomas)
支持字面量字符串类型强制的 SQL92 语法
       (如 "DATETIME 'now'")(Thomas)
添加 int2、int4 和 OID 类型与 text 之间的转换(Thomas)
构建索引时使用共享锁(Vadim)
事务块内为用户查询分配的内存在该查询完成后释放,
       此功能在 <= 6.2.1 中被关闭(Vadim)
新 SQL 语句 CREATE PROCEDURAL LANGUAGE(Jan)
新 PostgreSQL 过程语言(PL)后端接口(Jan)
把 pg_dump -H 选项改名为 -h(Bruce)
添加 Java 对口令和欧洲日期的支持(Peter)
为 LIKE 和 ~、!~ 操作使用索引(Bruce)
添加 datetime 和 timespan 的哈希函数(Thomas)
移除时间旅行(Vadim、Bruce)
为 \d 和 \z 添加分页并修复 \i(Bruce)
向后端和前端库添加 Unix 域套接字支持(Goran)
实现 CREATE DATABASE/WITH LOCATION 和 initlocation 工具(Thomas)
允许更多 SQL92 和/或 PostgreSQL 保留字作为列标识符(Thomas)
增强对 SQL92 SET TIME ZONE... 的支持(Thomas)
SET/SHOW/RESET TIME ZONE 使用 TZ 后端环境变量(Thomas)
实现 SET keyword = DEFAULT 和 SET TIME ZONE DEFAULT(Thomas)
启用使用 TZ 环境变量的 SET TIME ZONE(Thomas)
把 PGDATESTYLE 环境变量添加到前端和后端初始化(Thomas)
添加 PGTZ、PGCOSTHEAP、PGCOSTINDEX、PGRPLANS、PGGEQO
       前端库初始化环境变量(Thomas)
回归测试时区用 "setenv PGTZ PST8PDT" 自动设置(Thomas)
添加 pg_description 表以保存表、列、操作符、类型和
       聚合的信息(Bruce)
把系统表/索引名 16 字符的限制增加到 32 字符(Bruce)
重命名系统索引(Bruce)
向 SET DATESTYLE 添加 'GERMAN' 选项(Thomas)
定义带 "hh:mm:ss" 字段的 "ISO 风格" timespan 输出格式(Thomas)
允许 delta time 的小数值(如 '2.5 days')(Thomas)
更仔细地验证 delta time 的数字输入(Thomas)
实现把年积日作为 date_part() 的可能输入(Thomas)
定义 timespan_finite() 和 text_timespan() 函数(Thomas)
移除归档内容(Bruce)
允许有独立于系统口令文件的 pg_password 认证数据库(Todd)
转储 ACL、GRANT、REVOKE 权限(Matt)
定义 text、varchar 和 bpchar 字符串长度函数(Thomas)
修复继承的查询处理和代价计算(Bruce)
实现 CREATE TABLE/AS SELECT(SELECT/INTO 的替代)(Thomas)
允许约束中的 NOT、IS NULL、IS NOT NULL(Thomas)
实现 SELECT 的 UNION(Bruce)
向 INSERT 添加 UNION、GROUP、DISTINCT(Bruce)
varchar() 在磁盘上只存储必要的字节(Bruce)
修复 BLOB 的问题(Peter)
JDBC 超大补丁……变更列表见 README_6.3(Peter)
从 PQconnectdb() 移除未使用的 "option"
新 LOCK 命令和描述死锁的锁手册页(Bruce)
添加新 psql \da、\dd、\df、\do、\dS 和 \dT 命令(Bruce)
增强 psql \z 以显示序列(Bruce)
在 psql \d 表中显示 NOT NULL 和 DEFAULT(Bruce)
新 psql .psqlrc 文件启动(Andrew)
修改 contrib/linux 中的示例启动脚本以显示 syslog(Thomas)
contrib/ip_and_mac 中 IP 和 MAC 地址的新类型(TomH)
contrib/unixdate 中与日期/时间类型的 Unix 系统时间转换(Thomas)
contrib 内容的更新(Massimo)
向 DBD::Pg 添加 Unix 套接字支持(Goran)
新 python 接口(PyGreSQL 2.0)(D'Arcy)
新前端/后端协议有版本号和网络字节序(Phil)
pg_hba.conf 的安全特性得到增强和记录,大量清理(Phil)
CHAR() 现在比 VARCHAR() 或 TEXT 访问更快
ecpg 嵌入式 SQL 预处理器
降低系统列开销(Vadmin)
移除 pg_time 表(Vadim)
添加 pg_type 属性以标识需要长度的类型(bpchar、varchar)
COPY 命令失败时添加对问题行的报告
允许视图权限与底层表分开设置。
       为安全起见,酌情对视图使用 GRANT/REVOKE(Jan)
表现在没有默认的 GRANT SELECT TO PUBLIC。你必须
       显式授予此类权限。
清理教程示例(Darren)

源代码树变更
-------------------
添加新的 html 开发工具和 /tools/backend 中的流程图
修复 SCO 编译
Stratus 计算机移植(Robert Gillies)
为 BSD44_derived & i386_solaris 添加 shlib 支持
使 configure 更加自动化(Brook)
添加检查回归测试结果的脚本
把解析器函数拆分为更小的文件并分组(Bruce)
把 heap_create 改名为 heap_create_and_catalog,把 heap_creatr
       改名为 heap_create()(Bruce)
Sparc/Linux 的锁定补丁(TomS)
移除 PORTNAME 并重组移植特定内容(Marc)
添加优化器 README 文件(Bruce)
移除优化器中的一些递归并清理其中一些代码(Bruce)
修复 NetBSD 锁定(Henry)
修复 libptcl 的制作(Tatsuo)
AIX 补丁(Darren)
把 IS TRUE、IS FALSE、... 更改为使用 "=" 的表达式而不是
       对 istrue() 或 isfalse() 的函数调用以允许优化(Thomas)
各种 NetBSD/Sparc 相关修复(TomH)
Alpha linux 锁定(Travis、Ryan)
把 elog(WARN) 改为 elog(ERROR)(Bruce)
FreeBSD 的 FAQ(Marc)
把 PostODBC 源代码树纳入我们的标准发行版(Marc)
HP/UX 10 与 9 的小补丁(Stan)
新 pg_attribute.atttypmod 用于 varchar 长度等类型特定信息(Bruce)
UnixWare 补丁(Billy)
自旋锁 asm 的新 i386 'lock'(Billy)
移除对多路复用后端的支持
开始 OpenBSD 移植
开始 AUX 移植
开始 Cygnus 移植
向回归套件添加字符串函数(Thomas)
扩展一些以前截断为 16 字符的函数名(Thomas)
移除不需要的 malloc() 调用并用 palloc() 替换(Bruce)

提交更正

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