閱讀976 返回首頁    go 阿裏雲 go 技術社區[雲棲]


PostgreSQL前言

本文檔為PostgreSQL 9.6.0文檔,本轉載已得到原譯者彭煜瑋授權。

PostgreSQL是以加州大學伯克利分校計算機係開發的POSTGRES, 版本 4.2為基礎的對象關係型數據庫管理係統(ORDBMS)。POSTGRES 領先的許多概念在很久以後才出現在一些商業數據庫係統中。

PostgreSQL是最初的伯克利代碼的開源繼承者。它支持大部分 SQL 標準並且提供了許多現代特性:

  • 複雜查詢
  • 外鍵
  • 觸發器
  • 可更新視圖
  • 事務完整性
  • 多版本並發控製

同樣,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係統的任何部分的人員。 我們不應該對這些術語的概念理解得太狹隘;這份文檔集在係統管理過程方麵沒有固定的假設。

最後更新:2017-08-16 13:32:16

  上一篇:go  阿裏雲免費6個月套餐邀請碼
  下一篇:go  如何快速掌握阿裏巴巴內部高效測試流程?