pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
1999-06-09
此版本标志着开发团队对从 Berkeley 继承的源代码的掌握迈出了一大步。你会看到我们现在能轻松添加重大特性,这要归功于我们全球开发团队不断扩大的规模和日益丰富的经验。
以下是较显著变更的简要总结:
这移除了我们旧的表级锁定,代之以优于大多数商业数据库系统的锁定系统。在传统系统中,每个被修改的行都被锁定直到提交,阻止其他用户读取。MVCC 利用 PostgreSQL 天生的多版本特性,允许读者在写入者活动期间继续读取一致的数据。写入者继续使用紧凑的 pg_log 事务系统。这一切都不需要像传统数据库系统那样为每行分配锁。因此,基本上我们不再受简单表级锁定的限制;我们有了比行级锁定更好的东西。
pg_dump 利用新的 MVCC 特性,在数据库保持在线并可用于查询的同时给出一致的数据库转储/备份。
我们现在有了真正的数字数据类型,精度由用户指定。
临时表保证在数据库会话内名称唯一,并在会话退出时销毁。
我们现在支持 CASE、INTERSECT 和 EXCEPT 语句。新增了 LIMIT/OFFSET、SET TRANSACTION ISOLATION LEVEL、SELECT ... FOR UPDATE 以及改进的 LOCK TABLE 命令。
得益于团队内的多种才能,我们继续加快 PostgreSQL 的速度。我们加速了内存分配、优化、表连接和行传输例程。
我们继续扩大移植列表,这次包括 Windows NT/ix86 和 NetBSD/arm32。
大多数接口有了新版本,现有功能得到改进。
文档中到处都有新的和更新的材料。SGI 和 AIX 平台有了新的 FAQ。教程有 Stefan Simkovics 编写的 SQL 入门信息。用户指南有涵盖 postmaster 和更多工具程序的参考页,新附录包含日期/时间行为的细节。管理员指南有 Tom Lane 编写的故障排除新章节。程序员指南有 Stefan 编写的查询处理描述,以及通过匿名 CVS 和 CVSup 获取 PostgreSQL 源代码树的细节。
希望从任何以前的 PostgreSQL 版本迁移数据的用户,需要使用 pg_dump 进行转储/恢复。pg_upgrade 不能用于升级到此版本,因为表的磁盘结构相对于以前的版本已更改。
新的多版本并发控制(MVCC)特性在多用户环境中可能给出略为不同的行为。请阅读并理解以下章节,以确保你的现有应用程序能给出你需要的行为。
由于 6.5 中的读者不锁定数据(无论事务隔离级别如何),一个事务读取的数据可能被另一个事务覆写。换句话说,如果 SELECT 返回了一行,并不意味着该行在被返回时(即语句或事务开始之后的某个时刻)确实存在,也不意味着该行在当前事务提交或回滚之前受到保护,不被并发事务删除或更新。
为确保某行确实存在并保护它不被并发更新,必须使用 SELECT FOR UPDATE 或适当的 LOCK TABLE 语句。从以前的 PostgreSQL 版本和其他环境移植应用程序时应考虑到这一点。
如果你在使用 contrib/refint.* 触发器做参照完整性,请记住上述内容。现在需要额外的技术。一种方法是:如果事务要更新/删除主键,使用 LOCK parent_table IN SHARE ROW EXCLUSIVE MODE 命令;如果事务要更新/插入外键,使用 LOCK parent_table IN SHARE MODE 命令。
注意,如果你以 SERIALIZABLE 模式运行事务,则必须在执行事务中的任何 DML 语句(SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO)之前执行上述 LOCK 命令。
当实现读取脏(未提交)数据的能力(无论隔离级别)和真正的参照完整性后,这些不便将消失。
缺陷修复
---------
修复 text<->float8 和 text<->float4 转换函数(Thomas)
修复创建带大小写混合约束表的问题(Billy)
更改 exp()/pow() 行为以在下溢/上溢时报错(Jan)
修复 pg_dump -z 中的缺陷
内存越界清理(Tatsuo)
修复 lo_import 崩溃(Tatsuo)
调整数据类型名的处理以抑制双引号(Thomas)
用类型强制匹配列和 DEFAULT(Thomas)
修复死锁,使其在一秒睡眠后只检查一次(Bruce)
聚合和 PL/pgsql 的修复(Hiroshi)
修复子查询崩溃(Vadim)
修复 libpq 函数 PQfnumber 和大小写不敏感名称的问题(Bahman Rafatjoo)
修复大对象中间写入、无额外块和内存消耗的问题(Tatsuo)
修复 pg_dump -d 或 -D 以及 INSERT 中特殊字符的引号问题
修复 dynahash 的严重问题(Tom)
修复 INET/CIDR 可移植性问题
修复 ALTER TABLE ADD COLUMN 中选择率错误的问题(Bruce)
修复执行器使不同列类型的归并连接可用(Tom)
修复 Alpha OR 选择率缺陷
修复 OR 索引选择率问题(Bruce)
修复 \d 为 char()/varchar() 显示正确长度的问题(Ryan)
修复教程代码(Clark)
改进 destroyuser 检查(Oliver)
修复 Kerberos 的问题(Rodney McDuff)
修复存在脏缓冲区时删除数据库的问题(Bruce)
修复使 sequence nextval() 可区分大小写的问题(Bruce)
修复 !!= 操作符
销毁数据库文件前丢弃缓冲区(Bruce)
修复执行器两次求值函数的情形(Tatsuo)
允许 sequence nextval 动作区分大小写(Bruce)
修复优化器对负数索引不工作的问题(Bruce)
修复执行器中 fjIsNull 的内存泄漏
修复聚合内存泄漏(Erik Riedel)
允许含连字符的用户名授予权限
清理 inet 类型中的 NULL
清理系统表缺陷(Tom)
修复 PAGER 和 \? 命令的问题(Masaaki Sakaida)
把默认多段文件大小限制降为 1GB(Peter)
修复 CREATE OPERATOR 的转储(Tom)
修复游标反向扫描(Hiroshi Inoue)
修复使用 \i 时的 COPY FROM STDIN(Tom)
修复子查询在表达式内比较的问题(Jan)
修复返回行时的错误报告处理(Tom)
修复数组类型引用的问题(Tom、Jan)
防止 UPDATE SET oid(Jan)
修复 pg_dump 使 -t 选项可处理大小写敏感的表名
特殊情形 GROUP BY 的修复(Tom、Jan)
修复失败查询的内存泄漏(Tom)
DEFAULT 现在支持大小写混合的标识符(Tom)
修复表和索引 DROP/RENAME 的多段使用(Ole Gjerde)
禁用 pg_dump 同时使用 -o 和 -d 选项(Bruce)
允许 pg_dump 正确转储组权限(Bruce)
修复 INSERT INTO table SELECT * FROM table2 中的 GROUP BY(Jan)
修复视图中的计算(Jan)
修复数组索引上的聚合(Tom)
修复 DEFAULT 处理值中需要过多引号的单引号的问题
修复非超级用户导入/导出大对象的安全问题(Tom)
创建表的事务回滚现在正确清理(Tom)
修复以允许长表名和列名生成正确的序列名(Tom)
增强
------------
添加 "vacuumdb" 工具
通过更好的内存分配加速 libpq(Tom)
EXPLAIN 显示所有使用的索引(Tom)
实现 CASE、COALESCE、NULLIF 表达式(Thomas)
新 pg_dump 表输出格式(Constantin)
添加字符串 min()/max() 函数(Thomas)
把新类型强制技术扩展到聚合(Thomas)
新 moddatetime contrib(Terry)
更新到 pgaccess 0.96(Constantin)
为单字节 "char" 类型添加例程(Thomas)
改进的 substr() 函数(Thomas)
改进的多字节处理(Tatsuo)
多版本并发控制/MVCC(Vadim)
新 Serialized 模式(Vadim)
修复超过 2GB 表的问题(Peter)
新 SET TRANSACTION ISOLATION LEVEL(Vadim)
新 LOCK TABLE IN ... MODE(Vadim)
更新 ODBC 驱动(Byron)
新 NUMERIC 数据类型(Jan)
新 SELECT FOR UPDATE(Vadim)
处理输入值的 "NaN" 和 "Infinity"(Jan)
改进的日期/年份处理(Thomas)
改进的后端连接处理(Magnus)
日志文件的新选项 ELOG_TIMESTAMPS 和 USE_SYSLOG(Massimo)
新 TCL_ARRAYS 选项(Massimo)
新 INTERSECT 和 EXCEPT(Stefan)
用于主键跟踪的新 pg_index.indisprimary(D'Arcy)
允许在创建前删除表的新 pg_dump 选项(Brook)
行输出例程加速(Tom)
新 READ COMMITTED 隔离级别(Vadim)
新 TEMP 表/索引(Bruce)
结果已排序时防止排序(Jan)
新内存分配优化(Jan)
允许 psql 执行 \p\g(Bruce)
允许多个规则动作(Jan)
添加 LIMIT/OFFSET 功能(Jan)
改进连接大量表时的优化器(Bruce)
来自 S. Simkovics 硕士论文的新 SQL 介绍(Stefan、Thomas)
来自 S. Simkovics 硕士论文的后端处理新介绍(Stefan)
改进的 int8 支持(Ryan Bradetich、Thomas、Tom)
int8 与 text/varchar 类型之间转换的新例程(Thomas)
新浓密计划,其中连接元表(Bruce)
默认启用右手查询(Bruce)
允许在 configure 时设置可靠的最大后端数
(--with-maxbackends 和 postmaster 开关(-N backends))(Tom)
因优化器提速,GEQO 默认现为 10 表(Tom)
为 MS-SQL 可移植性允许 NULL=Var(Michael、Bruce)
修改 contrib check_primary_key() 使其可为 "automatic" 或 "dependent"(Anand)
允许 psql 对视图的 \d 显示查询(Ryan)
LIKE 提速(Bruce)
Ecpg 修复/特性,参见 src/interfaces/ecpg/ChangeLog 文件(Michael)
JDBC 修复/特性,参见 src/interfaces/jdbc/CHANGELOG(Peter)
使 % 操作符具有与 / 相同的优先级(Bruce)
添加新 postgres -O 选项以允许系统表结构更改(Bruce)
更新 contrib/pginterface/findoidjoins 脚本(Tom)
带索引已删行 vacuum 的大幅提速(Vadim)
允许非 SQL 函数根据参数运行不同版本(Tom)
添加 -E 选项显示 \dt 等发送的实际查询(Masaaki Sakaida)
在 psql 启动横幅中添加版本号(Masaaki Sakaida)
新 contrib/vacuumlo 移除未被引用的大对象(Peter)
新表大小初始化使未清理的表性能更好(Tom)
改进连接被拒绝时的错误消息(Tom)
支持 char() 和 varchar() 字段数组(Massimo)
哈希代码的彻底改造以提高可靠性和性能(Tom)
更新到 PyGreSQL 2.4(D'Arcy)
更改调试选项使 -d4 和 -d5 产生不同的节点显示(Jan)
新 pg_options:pretty_plan、pretty_parse、pretty_rewritten(Jan)
更好的系统表访问优化统计(Tom)
更好地处理非默认块大小(Massimo)
改进 GEQO 优化器内存消耗(Tom)
UNION 现在支持对不在目标列表中的列 ORDER BY(Jan)
libpq++ 的重大改进(Vince Vielhaber)
pg_dump 现在默认使用 -z(ACL)(Bruce)
后端缓存和内存提速(Tom)
让 pg_dump 在一个快照事务中完成所有工作(Vadim)
修复大对象内存泄漏和 pg_dump 问题(Tom)
INET 类型现在比较时遵循网络掩码
使 VACUUM ANALYZE 只使用读锁(Vadim)
允许 UNION 上的视图(Jan)
pg_dump 现在能在活动数据库上生成一致快照(Vadim)
源代码树变更
-------------------
改进移植匹配(Tom)
SunOS 可移植性修复
添加 Windows NT 后端移植并启用动态装载(Magnus 和 Daniel Horak)
新移植到运行 Linux 的 Cobalt Qube(Mips)(Tatsuo)
移植到 NetBSD/m68k(Mr. Mutsuki Nakajima)
移植到 NetBSD/sun3(Mr. Mutsuki Nakajima)
移植到 NetBSD/macppc(Toshimi Aoki)
修复 tcl/tk 配置(Vince)
移除规则查询的 CURRENT 关键字(Jan)
NT 动态装载现在可用(Daniel Horak)
添加 ARM32 支持(Andrew McMurry)
更好地支持 HP-UX 11 和 UnixWare
改进文件处理使其更统一,防止文件描述符泄漏(Tom)
plpgsql 的新安装命令(Jan)
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。