↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

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

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

29.9. 版本 6.3

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

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

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

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

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

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

注意

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

我想提一些 6.3 的普遍问题。这里只是一句话说不完的大项。仍需查阅详细变更列表。

首先,我们现在有了子查询。既然有了它们,我想指出:没有子查询的 SQL 是一种非常受限的语言。子查询是一项重大特性,你应当检查自己的代码, 看看哪些地方子查询能为你的查询提供更好的解决方案。我想你会发现, 子查询的用途比你想象的更多。Vadim 用子查询让我们登上了 SQL 的 大舞台,而且是功能完备的子查询。子查询唯一不能做的,是用在目标 列表中。

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

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

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

用户创建的表现在默认不再对 PUBLIC 授予 SELECT 权限。这样做是因为 ANSI 标准的要求。当然,你可以在表创建之后随意 GRANT 你想要的任何权限。系统表仍然可被 PUBLIC SELECT。

我们还有真正的死锁检测代码。不再有六十秒超时。而且新的锁定代码更好地实现了 FIFO,因此在重度使用期间资源饥饿应该会更少。

以前的版本中有很多关于文档不足的抱怨。Thomas 在此版本的许多新手册上投入了大量精力。请查看 doc/ 目录。

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

这是第一个真正需要为现有用户做解释的版本。在许多方面,这是必要的,因为新版本移除了许多限制,人们以前使用的变通方法不再需要。

29.9.1. 迁移到版本 6.3

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

29.9.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)
修复 notty 输出以显示状态结果。-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)
允许对非常量使用 Postgres 风格的转换("::")(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)
新 Postgres 过程语言(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 和/或 Postgres 保留字作为列标识符(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)
修复 Query 对继承的处理以及代价计算(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 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。