记录学习过程
前言
PostgreSQL是什么
PostgreSQL 是一款基于加州大学伯克利分校计算机科学系研发的 POSTGRES 4.21 版 的对象关系型数据库管理系统(ORDBMS)。
PostgreSQL 是伯克利原始代码的开源后继版本。它支持 SQL 标准的绝大部分内容,并提供众多现代化特性:
- 复查查询
- 外键
- 触发器
- 可更新视图
- 事务完整性
- 多版本并发控制
用户还可以通过多种方式对 PostgreSQL 进行扩展,比如: - 新增数据类型
- 新增函数
- 新增操作符
- 新增聚合函数
- 新增索引方法
- 新增过程语言
因其宽松的许可协议,任何人都可以免费使用、修改和分发 PostgreSQL,可用于个人、商业或学术等任何用途。
PostgreSQL 简史
伯克利 POSTGRES 项目
由迈克尔・斯通布雷克教授领导的 POSTGRES 项目,由 ** 美国国防高级研究计划局(DARPA)、陆军研究办公室(ARO)、国家科学基金会(NSF)** 以及 ESL 公司资助。
- POSTGRES 的研发工作始于 1986 年。
- 系统的最初设计理念发表于文献("The design of POSTGRES"Michael Stonebraker and L. Rowe)
初始数据模型的定义发表于文献("The POSTGRES Data Model"Lawrence A. Rowe And Michael R. Stonebraker)。 - 规则系统的设计在"The design of the POSTGRES. rules system"中有详细阐述
- 存储管理器的设计思路与架构则在("THE DESIGN OF THE POSTGRES STORAGE SYSTEM" Michael Stonebraker) 中进行了详细说明。
POSTGRES 经历了多次重要版本发布:
- 第一个演示版系统于 1987 年投入使用,并在 1988 年 ACM-SIGMOD 会议上进行了展示
- 版本 1,(见文献 "THE IMPLEMENTATION OF POSTGRES" Michael Stonebraker, Lawrence A. Rowe and Michael Hiroham)于 1989 年 6 月向部分外部用户发布
- 版本 2,针对对第一代规则系统的批评("A COMMENTARY ON THE POSTGRES RULES SYSTEM" Michael Stonebraker, Marti Hearst, and Spyros Potamianos),项目组重新设计了规则系统("ON RULES, PROCEDURES, CACHING and VIEWS IN DAT A BASE SYSTEMS" Michael Stonebraker, Anant Jhingran, Jeffrey Goh and Spyros Potamianos),并于 1990 年 6 月发布了搭载新规则系统的版本 2
- 版本 3, 于 1991 年推出,增加了对多存储管理器的支持、改进了查询执行器,并重写了规则系统
- 在随后直到 Postgres95 发布前的各个版本中,研发重点主要集中在可移植性与可靠性上
- Illustra Information Technologies(后并入 Informix,现归属 IBM)获取了该代码并将其商业化
- 1992 年末,POSTGRES 成为 Sequoia 2000 科学计算项目的核心数据管理系统
- 1993 年,外部用户规模几乎翻倍。原型系统的维护与技术支持占用了大量本该用于数据库研究的时间。为减轻支持负担,伯克利 POSTGRES 项目在发布版本 4.2后正式宣告结束
Postgres95
1994 年,Andrew Yu 和 Jolly Chen 为 POSTGRES 添加了 SQL 语言解释器。它以 Postgres95 这一新名称发布到互联网上,作为伯克利原版 POSTGRES 代码的开源后继版本,开启了自身的发展之路。
Postgres95 代码完全采用 ANSI C 编写,代码体积缩减了 25%。多项内部改进提升了性能与可维护性。在威斯康星基准测试中,Postgres95 1.0.x 版本的运行速度比 POSTGRES 4.2 版本快 30%--50%。除修复错误外,主要增强以下功能:
- 将查询语言 PostQUEL 替换为 SQL(在服务器端实现)。子查询功能直到后续 PostgreSQL 版本才支持,但在 Postgres95 中可通过用户自定义 SQL 函数模拟实现。聚合函数被重新实现,并增加了对 GROUP BY 查询子句的支持。
- 提供了基于 GNU Readline 的交互式 SQL 查询程序 psql,在很大程度上取代了旧的监控程序。
- 新增前端库 libpgtcl,支持基于 Tcl 的客户端。提供了示例外壳程序 pgtclsh,通过新的 Tcl 命令实现 Tcl 程序与 Postgres95 服务器的交互。
- 重新设计了大对象接口。反向大对象(inversion large objects) 成为存储大对象的唯一机制。(反向文件系统已被移除。)
- 移除了实例级规则系统。规则仍可作为重写规则使用
- 随源码一同分发了一份简短教程,介绍常规 SQL 特性以及 Postgres95 自身特性
- 使用 GNU make(而非 BSD make)进行编译构建
PostgreSQL
到了 1996 年,事实表明 "Postgres95" 这个名字经不起时间的考验。于是选用了一个新名称:PostgreSQL,以体现最初的 POSTGRES 与具备 SQL 能力的新版本之间的关系。与此同时,将版本号从6.0开始,使其重新归入伯克利 POSTGRES 项目最初启动的版本序列中。
Postgres 至今仍被视为官方项目名称,这既是出于传统,也因为人们觉得 Postgres 比 PostgreSQL 更易发音。