概述
今天分享的內容是關於一個用萌萌的大象作為Logo的資料庫產品,它的名字叫做PostgreSQL,一般都簡稱他為「PG」。
下面先從它的起源開始介紹~
PostgreSQL的起源
1977年,Michael Stonebraker開始和學生一起做關係型數據相關的研究並成立了項目Ingres,「Interactive Graphics and Retrieval System」的縮寫,是PostgreSQL資料庫的前身。
Stonebraker後來成立了Ingres Corporation公司, 開始做一個叫」post-INGRES」的項目,嘗試去解決一些原有關係模型的限制,後來被稱作POSTGRES。
POSTGRES 項目是由防務高級研究項目局(DARPA),陸軍研究辦公室(ARO),國家科學基金(NSF), 以及 ESL, Inc 共同贊助的。
PostgreSQL是完全由社區驅動的開源項目,由全世界超過1000名貢獻者所維護。它提供了單個完整功能的版本,而不像MySQL那樣提供了多個不同的社區版、商業版與企業版。PostgreSQL基於自由的BSD/MIT許可,組織可以使用、複製、修改和重新分發代碼,只需要提供一個版權聲明即可。
可靠性是PostgreSQL的最高優先級。它以堅如磐石的品質和良好的工程化而聞名,支持高事務、任務關鍵型應用。PostgreSQL的文檔非常精良,提供了大量免費的在線手冊,還針對舊版本提供了歸檔的參考手冊。PostgreSQL的社區支持是非常棒的,還有來自於獨立廠商的商業支持。
使用限制
作為一種企業級資料庫,PostgreSQL以它所具有的各種高級功能而自豪,像多版本並發控制(MVCC)、按時間點恢復(PITR)、表空間、異步複製、嵌套事務、在線熱備、複雜查詢的規劃和優化以及為容錯而進行的預寫日誌等。它支持國際字符集、多位元組編碼並支持使用當地語言進行排序、大小寫處理和格式化等操作。它也在所能管理的大數據量和所允許的大用戶量並發訪問時間具有完全的高伸縮性。目前已有很多PostgreSQL的系統在實際生產環境下管理著超過4TB的數據。一些PostgreSQL系統的極限值如下表所列:
PostgreSQL在數據存儲方面所能支持的容量是相當大的。
眾多功能和標準兼容性
PostgreSQL對SQL標準高度兼容,它實現的功能完全遵守於ANSI-SQL:2008標準。目前完全支持子查詢(包括在FROM中的子查詢)、授權讀取和可序列化的事務隔離級別。同時PostgreSQL也具有完整的關係數據庫系統的目錄功能,它支持單資料庫的多模式功能,每一個目錄可通過SQL標準中定義的字典信息模式進行訪問。
Data集成性功能包括(復合)主鍵、含有嚴格約束或級聯更新和刪除功能的外鍵、錄入檢查約束、唯一性約束和非空約束。
PostgreSQL也具有很多擴展模塊和更高級的功能。其中有為方便使用的通過序列實現的自增欄位、 允許返回部分記錄集的LIMIT/OFFSET選項,也支持復合、唯一、部分和函數式索引,索引並支持B-Tree、R-Tree、Hash或GiST存儲方式。
GiST (通用搜索樹) 索引是一種高級系統算法,它將不同的排序算法與包含B-Tree、B+-Tree、R-Tree、部分匯總樹、可加權的B+-Tree以及其他多種搜索邏輯結合在一起,它也提供了接口允許創建用戶數據類型和擴展的查詢方法。這樣,GiST提供了用戶指定存儲和定義新方法進行查詢的靈活性---它大大超越了標準B-Tree、R-Tree和其他通用搜索邏輯所能提供的功能。
GiST現在也成為很多其他使用PostgreSQL公共項目的基礎,如OpenFTS和PostGIS項目。 OpenFTS(開源全文搜尋引擎)項目提供在線索引和資料庫搜索的相當權重評分。 PostGIS項目給PostgreSQL增加了地理信息管理功能,允許用戶將PostgreSQL作為GIS空間地理信息資料庫使用,這和專業的ESRI公司的SDE系統以及Oracle的空間地理擴展模塊功能相同。
其他高級功能包括表繼承、規則和資料庫事件響應功能等。表繼承功能可以按原來的一個表創建一個有關係的新表,這樣允許資料庫設計人員可以將一個表作為基表,從基表派生出新表。並且PostgreSQL甚至可以使用此方式實現單級或多級的繼承。
規則功能是用來調用查詢的重算功能,允許資料庫設計人員根據不同的表或視圖來創建規則,以實現動態改變資料庫原操作為新的操作的功能。
事件響應功能是一個內部通訊功能,它將系統信息或事件在用戶使用的LISTEN和NOTIFY兩條指令後進行傳遞,允許 簡要的點對點通訊或是對指定資料庫事件的定點通訊。由於信息可以從觸發器或是存儲過程中發出,PostgreSQL的用戶可以監控類似更新、新增或是刪除的資料庫事件。
高度可定製性
PostgreSQL的存儲過程開發可以使用眾多的程序語言,包括Java、Perl、Python、Ruby、Tcl、C/C++和自帶的PL/pgSQL,其中的PL/pgSQL與Oracle的PL/SQL很相似,內置了數百個函數,功能從基本的算術計算和字符串處理到加密邏輯計算並與Oracle有高度兼容性。觸發器和存儲過程可以使用C語言開發並可以作為內部庫文件加載至資料庫內部,開發上的巨大靈活性擴展了資料庫能力。相應地,PostgreSQL也包括一套框架允許開發人員定義和創建他們自己的可在函數中使用數據類型,也可以定義操作符新的處理方式,具有了這樣的能力後,PostgreSQL現已具有了各種高級數據類型,包括幾何圖形、空間地理、網絡地址甚至於ISBN/ISSN(國際標準書號/國際標準序列號),這些都可以加入至系統中。
由於有很多的存儲過程語言可以使用,這樣也產生了很多的庫接口,這樣允許各種編譯型或是解釋型的語言在PostgreSQL進行使用,包括Java(JDBC)、ODBC、Perl、Python、Ruby、C、C++、PHP、Lisp、Scheme和Qt等。
體系架構
像絕大多數資料庫產品一樣,PostgreSQL也是由資料庫實例和相關文件組成,其中實例包括資料庫的一些各負其職的進程與內存結構組成,資料庫的文件也包含控制文件、WAL文件、數據文件和各種配置文件。
PostgreSQL的基本結構如下:
其實最重要的一點,PostgreSQL的原始碼可以自由獲取,它的授權是在非常自由的開源授權下,這種授權允許用戶在各種開源或是閉源項目中使用、修改和發布PostgreSQL的原始碼。用戶對原始碼的可以按用戶意願進行任何修改、改進。因此,PostgreSQL不僅是一個強大的企業級資料庫系統,也是一個用戶可以開發私用、網絡和商業軟體產品的資料庫開發平台。後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注一下~