PostgreSQL前言

本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权。

何为PostgreSQL?

PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES, 版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。POSTGRES 领先的许多概念在很久以后才出现在一些商业数据库系统中。

PostgreSQL是最初的伯克利代码的开源继承者。它支持大部分 SQL 标准并且提供了许多现代特性:

  • 复杂查询
  • 外键
  • 触发器
  • 可更新视图
  • 事务完整性
  • 多版本并发控制

同样,PostgreSQL可以用许多方法扩展,比如, 通过增加新的:

  • 数据类型
  • 函数
  • 操作符
  • 聚集函数
  • 索引方法
  • 过程语言

并且,因为自由宽大的许可证,任何人都可以以任何目的免费使用、修改和分发PostgreSQL, 不管是私用、商用还是学术研究目的。

PostgreSQL简史

现在被称为PostgreSQL的对象-关系型数据库管理系统是从加州大学伯克利分校写的POSTGRES软件包发展而来的。经过二十多年的发展,PostgreSQL是世界上可以获得的最先进的开源数据库。

伯克利的POSTGRES项目

由Michael Stonebraker教授领导的POSTGRES项目是由防务高级研究项目局(DARPA)、陆军研究办公室(ARO)、国家科学基金(NSF) 以及 ESL, Inc 共同赞助的。 POSTGRES的实现始于 1986 年。该系统最初的概念详见 The design of POSTGRES 。 最初的数据模型定义见 The POSTGRES data model 。当时的规则系统设计在The design of the POSTGRES rules system里描述。存储管理器的理论基础和体系结构在 The design of the POSTGRES storage system 里有详细描述。

从那以后,POSTGRES经历了几次主要的版本更新。 第一个"演示性"系统在 1987 年便可使用了, 并且在 1988 年的ACM-SIGMOD大会上展出。在 1989 年6月发布了版本 1(见 The implementation of POSTGRES )给一些外部的用户使用。 为了回应用户对第一个规则系统( A commentary on the POSTGRES rules system )的批评,在1990年6月发布了使用新规则系统的版本 2。 版本 3 在1991年出现,增加了多存储管理器的支持, 并且改进了查询执行器、重写了规则系统。直到Postgres95发布前(见下文)的后续版本大多把工作都集中在移植性和可靠性上。

POSTGRES已经被用于实现很多不同的研究和生产应用。这些应用包括: 一个财务数据分析系统、一个喷气引擎性能监控软件包、一个小行星跟踪数据库、一个医疗信息数据库和一些地理信息系统。POSTGRES还被许多大学用于教学用途。最后,Illustra Information Technologies(后来并入Informix, 而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版本在进行 Wisconsin Benchmark 测试时大概比POSTGRES的版本4.2 快 30-50%。除了修正了一些错误,下面的是一些主要提升:

原来的查询语言 PostQUEL 被SQL取代(在服务器端实现)。接口库libpq被按照PostQUEL命名。在PostgreSQL之前还不支持子查询(见下文),但它们可以在Postgres95中由用户定义的SQL函数模拟。聚集函数被重新实现。同时还增加了对GROUP BY 查询子句的支持。

新增加了一个利用GNU的Readline进行交互 SQL 查询的程序(psql)。这个程序很大程度上取代了老的monitor程序。

增加了新的前端库(libpgtcl), 用以支持基于Tcl的客户端。一个样本 shell(pgtclsh),提供了新的 Tcl 命令用于Tcl程序和Postgres95服务器之间的交互。

彻底重写了大对象的接口。保留了将大对象倒转(Inversion )作为存储大对象的唯一机制(去掉了倒转(Inversion )文件系统)。

去掉了实例级的规则系统。但规则仍然以重写规则的形式存在。

在发布的源码中增加了一个介绍SQL和Postgres95特性的简短教程。

用GNU的make(取代了BSD的make)来编译。Postgres95可以使用不打补丁的GCC编译(修正了双精度数据对齐问题)。

PostgreSQL

到了 1996 年, 很明显"Postgres95"这个名字已经跟不上时代了。于是我们选择了一个新名字PostgreSQL来反映与最初的POSTGRES和最新的具有SQL能力的版本之间的关系。同时版本号也从 6.0 开始, 将版本号放回到最初由伯克利POSTGRES项目开始的序列中。

很多人会因为传统或者更容易发音而继续用"Postgres"来指代PostgreSQL(现在很少用全大写字母)。这种用法也被广泛接受为一种昵称或别名。

Postgres95的开发重点放在标识和理解后端代码的现有问题上。PostgreSQL的开发重点则转到了一些有争议的特性和功能上面,当然各个方面的工作同时都在进行。

自那以来,PostgreSQL发生的变化可以在Appendix E中找到。

约定

下面的约定被用于命令的大纲:方括弧([和])表示可选的部分(在 Tcl 命令里,使用的是问号 (?),就像通常的 Tcl 一样)。 花括弧({和})和竖线(|)表示你必须选取一个候选。 点(...)表示它前面的元素可以被重复。

如果能提高清晰度,那么 SQL 命令前面会放上提示符=>, 而 shell 命令前面会放上提示符 $。不过,提示符通常不被显示。

一个管理员通常是一个负责安装和运行服务器的人员。 一个用户可以是任何使用或者需要使用PostgreSQL系统的任何部分的人员。 我们不应该对这些术语的概念理解得太狭隘;这份文档集在系统管理过程方面没有固定的假设。

时间: 2024-09-15 18:35:49

PostgreSQL前言的相关文章

MySQL和PostgreSQL两数据库的对决

在这篇文章中,我们选用MySQL 4.0.2-alpha与PostgreSQL 7.2进行比较,因为MySQL 4.0.2-alpha开始支持事务的概念,因此这样的比较对于MySQL应该较为有利.我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切.对于一个成熟的数据库,稳定性肯定会日益提供.而随着硬件性能的飞速提高,速度也不再是什么太大的问题. 一.前言 前一段时间,我曾经翻译过一篇 将你的网站从MySQL改为PostgreSQL ,其实

用postgreSQL做基于地理位置的app

  前言:项目中用到了postgreSQL中的earthdistance()函数功能计算地球上两点之间的距离,中文的资料太少了,我找到了一篇英文的.讲的很好的文章 ,特此翻译,希望能够帮助到以后用到earthdistance的同学. 一.两种可用的选择 当我们想用Postgres作为GEO函数使用时,我们通常有2中选择(据我所知): 1.PostGIS: 为postgreSQL提供了高级GEO函数功能.我用了它一段时间,但是它对于我的需求来说太笨重了. 2.Cube和Earthdistance:

PostgreSQL修炼之道:从小工到专家

数据库技术丛书 PostgreSQL修炼之道:从小工到专家 唐成著             图书在版编目(CIP)数据 PostgreSQL修炼之道:从小工到专家/唐成著. -北京:机械工业出版社,2015.4 (数据库技术丛书) ISBN 978-7-111-49872-8 I. P- II. 唐- III. 关系数据库系统 IV. TP311.132.3 中国版本图书馆CIP数据核字(2015)第063966号 PostgreSQL修炼之道:从小工到专家 出版发行:机械工业出版社(北京市西城

PostgreSQL · 实现分析 · PostgreSQL 10.0 并行查询和外部表的结合

title: PostgreSQL · 实现分析 · PostgreSQL 10.0 并行查询和外部表的结合 author: 义从 前言 大家都知道,PostgreSQL 近几大版本中加入了很多 OLAP 相关特性.9.6 的并行扫描应该算最大的相关特性.在今年发布的 10.0 中,并行扫描也在不断加强,新增了并行的索引扫描. 我们知道并行扫描是支持外部数据源的.在云上,有很多存储存储产品可以以外部数据源的形式做数据库的外部存储.例如,阿里云的 OSS 和 AWS 的 S3 都是绝佳的外部数据源

数据库内核月报 - 2015 / 10-PgSQL · 特性分析 · PostgreSQL Aurora方案与DEMO

前言 亚马逊推出的Aurora数据库引擎,支持一份存储,一主多读的架构.这个架构和Oracle RAC类似,也是共享存储,但是只有一个实例可以执行写操作,其他实例只能执行读操作.相比传统的基于复制的一主多读,节约了存储和网络带宽的成本. 我们可以使用PostgreSQL的hot standby模式来模拟这种共享存储一主多读的架构,但是需要注意几点,hot standby也会对数据库有写的动作,例如recovery时,会修改控制文件,数据文件等等,这些操作是多余的.另外很多状态是存储在内存中的,所

《PostgreSQL 权威指南》Request For Comments - 结构

一直想写一本关于PostgreSQL的书,从08年开始使用PostgreSQL,它确实是一个非常友好,功能强大,稳定,发展迅猛的关系数据库管理系统.国外介绍PostgreSQL的书籍比较多,有兴趣的朋友可以去亚马逊网站上搜索一下,或者到皮皮书屋搜索. http://www.ppurl.com/?s=postgresql 但是中文的比较少,去年出了一本<PostgreSQL数据库内核分析> ,另外有一本<PostgreSQL必备参考手册>版本8.2的,而PostgreSQL从8.2到

PostgreSQL分区表(partitioning)应用实例详解_PostgreSQL

前言 项目中有需求要垂直分表,即按照时间区间将数据拆分到n个表中,PostgreSQL提供了分区表的功能.分区表实际上是把逻辑上的一个大表分割成物理上的几小块,提供了很多好处,比如: 1.查询性能大幅提升 2.删除历史数据更快 3.可将不常用的历史数据使用表空间技术转移到低成本的存储介质上 那么什么时候该使用分区表呢?官方给出的指导意见是:当表的大小超过了数据库服务器的物理内存大小则应当使用分区表,接下来结合一个例子具体记录一下创建分区表的详细过程. 创建分区表 首先看一下需求,现在有一张日志表

态势感知将DDOS扼杀在摇篮中:涉及数千台PostgreSQL服务器

0x00 前言        近日,云盾的态势感知系统成功捕获到一起利用PostgreSQL弱口令批量植入木马的事件.本文将分享我们对此次事件的追踪过程,从攻击方式,用到的工具,到攻击的范围,还原整个攻击事件. 0x01 发现        2015年11月27日星期五,云盾态势感知系统产出了一条异常的告警,团队成员立即对告警进行响应.通过告警信息定位到了传播源.        我们发现该传播源为一个HFS文件服务器:        在HFS服务器中,发现了黑客用来批量扫描漏洞和自动攻击的程序:

Python连接PostgreSQL数据库的方法_python

前言 其实在Python中可以用来连接PostgreSQL的模块很多,这里比较推荐psycopg2.psycopg2安装起来非常的简单(pip install psycopg2),这里主要重点介绍下如何使用. 连接数据库: import psycopg2 conn = psycopg2.connect(host="10.100.157.168",user="postgres",password="postgres",database="