PostgreSQL(資料來自網絡)

PostgreSQL

PostgreSQL 是一個自由的對象-關係數據庫服務器(數據庫管理系統),它在靈活的 BSD-風格許可證下發行。它提供了相對其他開放源代碼數據庫系統(比如 MySQLFirebird),和對專有系統比如 OracleSybaseIBMDB2Microsoft SQL Server的一種選擇。

PostgreSQL 不尋常的名字導致一些讀者停下來嘗試拼讀它,特別是那些把SQL拼讀爲"sequel"的人。PostgreSQL 開發者把它拼讀爲 "post-gress-Q-L"。(Audio sample, 5.6k MP3)。它也經常被簡略念爲 "postgres"。

歷史

PostgreSQL 經歷了長時間的演變,開始於在 UC BerkeleyIngres 計劃。這個計劃的領導者 Michael Stonebraker1982年離開 Berkeley 去商業化 Ingres,但是最後還是返回了學術界。在1985年返回 Berkeley 之後,Stonebraker 開始了 post-Ingres 計劃來致力於在 1980 年代早期變得日益清楚的、當代數據庫系統的問題。Postgres 和 Ingres 的代碼庫開始(並保持)完全分離了。

結果的計劃叫 Postgres,目標是介入增加對類型的完全支持所需要的最小數目的特徵。這些特徵包括定義類型的能力,還有完全描述至今廣泛使用但由用戶完全維護着的聯繫的能力。在 Postgres 中數據庫"理解"聯繫,並可以使用規則以自然的方式在有關的表中檢索信息。

1986年開始項目組發表了一些描述系統基本原理的論文,並在1988年這項計劃建成並運行了一個原型版本。項目組在1989年六月向少數用戶發行了版本 1,隨後在1990年六月發行了帶有重寫後的規則系統的版本 2。1991年的版本 3 再次重寫了規則系統,並增加了對多個存儲管理器和改進的查詢引擎的支持。在1993年就有大量的用戶存在了,並開始用對支持和特徵的要求淹沒這個計劃。在發行了主要作爲最後清理的版本 4 之後計劃就終止了。

儘管 Postgres 計劃正式的終止了,BSD 許可證 (Berkeley 在其下發行的 Postgres) 確使開放源代碼開發者獲得複本並進一步開發系統。在1994年兩個 UC Berkeley 大學的研究生,Andrew Yu 和 Jolly Chen,增加了一個 SQL 語言解釋器來替代早先的基於 Ingres 的 QUEL 系統,建立了 Postgres95。代碼隨後被髮行到 web 上來在世界上找尋它自己的出路。在1996年計劃被重命名了: 爲了反映數據庫的新 SQL 查詢語言,Postgres95 變成了 PostgreSQL

第一次 PostgreSQL 發行形成了版本 6.0。隨後來自世界各地的一組數據庫開發者和志願者,通過 Internet 協作起來,維護着這套軟件。自從版本 6.0 之後,出現了很多後續發行,在系統中也出現了很多改進;在 2005年1月19日,版本 8.0 成爲當前發行。由8.0後,PostgreSQL以原生(Native)的方式,執行於Windows視窗系統。

儘管許可證允許 Postgres 的商業化,Postgres 代碼沒有像 Ingres 那樣快速的被商業開發-- 考慮到 Postgres 提供的好處這有些令人驚奇。主要分支起源於 Paula Hawthorn (從 Ingres 轉移來的最初的 Ingres 項目組成員)和 Michael Stonebraker 組建 Illustra 信息技術公司來商業化 Postgres 的時候。

在 2005 年一月,PostgresQL 收到了它來自數據庫廠商的第一份援助。Pervasive Software ([1]) 宣佈了商業支持和社區參與。

描述

對 PostgreSQL如果很草率地觀察,您可能會覺得這個數據庫系統,和其它數據庫很類似。因爲PostgreSQL 使用 SQL 語言來在執行資料的查詢。這些資料通過連外鍵聯繫在一起,以的一系列表格的形式存在。 PostgreSQL 相對於競爭者的主要優勢,主要的特徵爲可編程性: 對於使用數據庫資料的實際應用,PostgreSQL 讓開發與使用的工作,變得更加容易。

SQL 數據在"平面表格"中存儲簡單的數據類型,需要用戶使用查詢把有關的信息收集在一起。這與應用和用戶利用數據自身的方式相對立: 典型的使用帶有豐富數據類型的高級語言,在其中所有有關的數據作爲它自己的一個完整單元來操作。典型的稱呼爲記錄對象(依據各自語言)。

轉換來自 SQL 世界的信息到面向對象編程世界體現得很困難,因爲兩者有非常不同的數據組織的模型。工業界把這個問題稱爲阻抗不匹配: 從一個模型映射到另一個要花費項目開發者 40% 的時間。一些映射解決方案,典型的稱爲對象-關係映射,致力於這個問題,但是它們花費很多並有自身的問題,導致糟糕的性能或強制所有的數據訪問通過映射所支持的一種語言來進行。

PostgreSQL 可以直接在數據庫中解決很多這種問題。PostgreSQL 允許用戶定義基於正規的 SQL 類型的新類型,允許數據庫自身理解複雜數據。例如,你可以定義一個address來組合一些事物如街道編號、城市和國度的字符串。從這一點上你可以輕易的建立把保存地址的所需要的所有字段包含在一個單一行列中的表。

PostgreSQL 還允許類型包括繼承,這是在面向對象編程中的主要概念。例如,你可以定義 post_code 類型,並接着基於它建立 us_zip_codecanadian_postal_code。在數據庫中的 address 就可以採用 us_address 或者 canadian_address 形式,而特定的規則可以在各自情況下驗證數據。在 PostgreSQL 的早期版本中,實現新類型需要寫 C 擴展並把它們編譯到數據庫服務器中;在版本 7.4 中,通過 CREATE DOMAIN 建立和使用定製類型變得很容易了。

數據庫自身的編程可以從使用函數上獲得巨大的利益。多數 SQL 系統允許用戶寫存儲過程,它是其他 SQL 語句可以調用的一塊 SQL 代碼。但是 SQL 自身仍舊不適合作爲編程語言,而且 SQL 用戶在構造複雜邏輯時要經歷巨大的困難。更糟糕的是,SQL 自身不支持很多的編程語言中最基本的操作,比如分支循環。每個廠商都轉而寫它們自己對 SQL 語言的擴展來增加這些特徵,而這種擴展不是必須跨越數據庫平臺操作。

在 PostgreSQL 中程序員可以用一組可觀的支持語言中任何一種來寫這種邏輯。

  • 類似於 Oracle 的過程語言 PL/SQL 的叫做 PL/PgSQL 的內置語言,在處理查詢密集的過程時提供了獨特的優勢。
  • 流行腳本語言比如Perl, Python, Tcl, 和 Ruby 的包裝器,允許利用它們在字符串處理和連接到廣闊的外部函數庫的力量。
  • 需要把複雜邏輯編譯到機器代碼所能提供的高性能的過程可以利用CC++
  • 在更加深奧的方面,R 統計語言的處理器允許數據庫查詢利用它的一組豐富的統計函數。

程序員可以把代碼作爲函數插入服務器中,它是使代碼類似於存儲過程的一個小包裝器。以這種方式 SQL 代碼可以調用(比如) C 代碼或反之。

  • 性能增進,因爲數據庫引擎在一個時間一個地方調用所有的邏輯,減少了在客戶和服務器之間的來回往返的次數。
  • 可靠性增進,因爲數據驗證代碼集中到一個地方,就在服務器上,而不用依賴在多個客戶應用中的同步邏輯,它們甚至可能以多種編程語言寫成。
  • 通過向服務器增加有用的抽象,客戶代碼可以變得更短小和簡單。

這些優勢合起來可以證實 PostgreSQL 從編程角度是最高級的數據庫系統。使用 PostgreSQL 可以顯著的減少很多項目的整體編程時間,這種優勢隨着項目複雜而增長。

特徵

PostgreSQL 的某些在其他關係數據庫中很少見的特徵包括:

  • 用戶定義類型
  • 用戶定義操作符
  • 能獲得多個存儲過程語言,包括C, PL/Perl, PL/python, PL/PHP, PL/Java, PL/sh, PL/Tcl, PL/R, PL/Ruby, 和固有的 PL/PgSQL
  • 支持 IP 地址 (包括 IPv6), CIDR 塊,和 MAC 地址數據類型
  • 表繼承(但未完全實現)
  • 規則 - 實現允許應用開發者修改到來查詢的"查詢樹"的服務器端邏輯
  • 併發,通過多版本併發控制(MVCC)設計來管理,它即使在繁重的併發訪問下也能確保優異的性能
  • 表達式索引 - 在表達式的值之上建立索引,而不只在單一的或一組列之上
  • 部分索引 - 在表的一部分上建立索引。如果只有表的一部分實際上需要索引,就能節約磁盤空間並增進性能

此外,PostgreSQL 支持在企業級別數據庫中希望見到的幾乎所有構造,包括:

發佈了23 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章