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

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

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
历史版本PostgreSQL 7.3 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

2. PostgreSQL简史 #

如今名为 PostgreSQL(并曾短暂称为 Postgres95)的对象关系数据库管理系统,源自加州大学伯克利分校编写的 POSTGRES 软件包。经过十多年的发展,PostgreSQL 已成为当今任何地方都能获得的最先进的开源数据库,它提供多版本并发控制,支持几乎所有 SQL 结构(包括子查询、事务以及用户定义的类型和函数),并有广泛的语言绑定可用(包括 C、C++、Java、Perl、Tcl 和 Python)。

2.1. 伯克利 POSTGRES 项目

POSTGRES DBMS 的实现始于 1986 年。该系统的最初概念见于[ston86],而最初数据模型的定义见于[rowe87]。当时规则系统的设计见于[ston87a]。存储管理器的设计动机和体系结构详见[ston87b]。

自那以后,POSTGRES 经历了几次重大版本发布。第一个“演示版”系统于 1987 年开始运行,并在 1988 年的 ACM-SIGMOD 大会上进行了展示。版本 1 在[ston90a]中有描述,并于 1989 年 6 月发布给少数外部用户。针对第一代规则系统所受到的批评([ston89]),规则系统被重新设计([ston90b]),版本 2 连同新的规则系统于 1990 年 6 月发布。版本 3 于 1991 年问世,增加了对多个存储管理器的支持、改进后的查询执行器以及重写后的规则系统。此后直到 Postgres95(见下文)之前的后续版本,主要聚焦于可移植性和可靠性。

POSTGRES 被用于实现许多不同的研究和生产应用。这些应用包括金融数据分析系统、喷气发动机性能监测软件包、小行星跟踪数据库、医疗信息数据库以及若干地理信息系统。POSTGRES 还在多所大学中被用作教学工具。最后,Illustra Information Technologies(后来并入 Informix,该公司现归 IBM 所有)接手了这套代码并将其商业化。在 1992 年末,POSTGRES 成为Sequoia 2000 科学计算项目的主要数据管理器。

1993 年期间,外部用户社区的规模几乎翻了一番。人们越来越清楚地意识到,对原型代码的维护和支持工作占用了大量本应用于数据库研究的时间。为了减轻这一支持负担,伯克利 POSTGRES 项目在版本 4.2 时正式结束。

2.2. Postgres95

1994 年,Andrew Yu 和 Jolly Chen 为 POSTGRES 添加了一个 SQL 语言解释器。随后,它以 Postgres95 这一新名称发布到网络上,作为最初的 POSTGRES 伯克利代码的开源后继者自行发展。

Postgres95的代码完全采用 ANSI C 编写,并将体积缩减了 25%。许多内部更改提升了性能和可维护性。Postgres951.0.x 版本在 Wisconsin Benchmark 上快了大约 30-50%,比较对象是POSTGRES4.2 版。除了错误修复之外,主要增强还包括:

  • 查询语言 PostQUEL 被 SQL 所取代(在服务器中实现)。直到 PostgreSQL(见下文)才支持子查询,但在 Postgres95 中可以用用户定义的 SQL 函数来模拟。聚合函数也得到了重新实现,并增加了对 GROUP BY 查询子句的支持。libpq 接口仍然可用于 C 程序。

  • 除了 monitor 程序之外,还提供了一个用于交互式 SQL 查询的新程序(psql),它使用了 GNU Readline。

  • 新增的前端库 libpgtcl 支持基于 Tcl 的客户端。示例 shell pgtclsh 提供了新的 Tcl 命令,用于让 Tcl 程序与 Postgres95 服务器交互。

  • 大对象接口经过了全面改造。反转大对象成为存储大对象的唯一机制。(反转文件系统已被移除。)

  • 实例级规则系统被移除。规则仍然可以作为重写规则使用。

  • 源代码中附带了一份简短教程,介绍常规 SQL 特性以及 Postgres95 的特性。

  • 构建时使用的是 GNU make(而不是 BSD make)。此外,Postgres95 可以用未经修改的 GCC 编译(双精度浮点数的数据对齐问题已修复)。

2.3. PostgreSQL

到了 1996 年,很明显“Postgres95”这个名字经不起时间的考验。我们选择了一个新名字 PostgreSQL,以体现最初的 POSTGRES 与后来具备 SQL 能力的版本之间的关系。同时,我们将版本号从 6.0 开始,使编号重新回到最初由伯克利 POSTGRES 项目开启的序列中。

在开发 Postgres95 期间,重点是识别并理解服务器代码中已有的问题。到了 PostgreSQL 阶段,重点则转向增强特性和能力,不过各个方面的工作仍在继续。

PostgreSQL 中的主要增强包括:

  • 表级锁已被多版本并发控制取代,它允许读取者在写入者活动期间继续读取一致的数据,并使得在数据库保持可查询的同时,可以用 pg_dump 进行热备份。

  • 实现了重要的后端特性,包括子查询、默认值、约束和触发器。

  • 增加了额外的符合 SQL92 的语言特性,包括主键、带引号的标识符、字面串类型强制转换、类型转换以及二进制和十六进制整数输入。

  • 内置类型得到了改进,包括新的大范围日期/时间类型和额外的几何类型支持。

  • 后端代码的整体速度提升了大约 20-40%,而且自 6.0 版发布以来,后端启动时间缩短了 80%。

提交更正

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