複製鏈接
請複製以下鏈接發送給好友

PostgreSQL

鎖定
PostgreSQL是一種特性非常齊全的自由軟件的對象-關係型數據庫管理系統(ORDBMS),是以加州大學計算機系開發的POSTGRES,4.2版本為基礎的對象關係型數據庫管理系統。POSTGRES的許多領先概念只是在比較遲的時候才出現在商業網站數據庫中。PostgreSQL支持大部分的SQL標準並且提供了很多其他現代特性,如複雜查詢、外鍵觸發器視圖、事務完整性、多版本併發控制等。同樣,PostgreSQL也可以用許多方法擴展,例如通過增加新的數據類型、函數、操作符、聚集函數、索引方法、過程語言等。另外,因為許可證的靈活,任何人都可以以任何目的免費使用、修改和分發PostgreSQL。 [1] 
中文名
PostgreSQL
外文名
PostgreSQL
開發機構
加州大學伯克利分校
功    能
數據管理
特    性
複雜查詢、外鍵觸發器
領    域
計算機技術

PostgreSQL簡述

PostgreSQL是一個功能非常強大的、源代碼開放的客户/服務器關係型數據庫管理系統(RDBMS)。PostgreSQL最初設想於1986年,當時被叫做Berkley Postgres Project。該項目一直到1994年都處於演進和修改中,直到開發人員Andrew Yu和Jolly Chen在Postgres中添加了一個SQL(Structured Query Language,結構化查詢語言)翻譯程序,該版本叫做Postgres95,在開放源代碼社區發放。
1996年,再次對Postgres95做了較大的改動,並將其作為PostgresSQL6.0版發佈。該版本的Postgres提高了後端的速度,包括增強型SQL92標準以及重要的後端特性(包括子選擇、默認值、約束和觸發器)。
PostgreSQL是一個非常健壯的軟件包,有很多在大型商業RDBMS中所具有的特性,包括事務、子選擇、觸發器、視圖、外鍵引用完整性和複雜鎖定功能。另一方面,PostgreSQL也缺少商業數據庫中某些可用的特性,如用户定義的類型、繼承性和規則。從用户的角度來講,PostgreSQL惟一不具備的主要特性就是外部連接,在今後的版本中會將其加入。
PostgreSQL支持標準的SQL語言並加入了很多其他的功能以確保數據能夠安全存儲,根據數據負載能夠靈活擴展。它兼容所有的主流操作系統,除SQL的基本類型外還支持JSON、Key-value等數據類型,在數據一致性、高併發、高可用、數據恢復、數據安全等方面都有極為出色的表現,並且還有很多類似PostGIS這樣的強大插件。PostgreSQL的上述強大特性為其在世界範圍內贏得了很高的讚譽,也成為了很多開發者和機構首選的開源關係數據庫系統。 [4] 
PostgreSQL提供了兩種可選模式。一種模式保證如果操作系統或硬件崩潰,則數據將保存到磁盤中,這種模式通常比大多數商業數據庫要慢,這是因為它使用了刷新(或同步)方法;另一種模式與第一種不同,它不提供數據保證,但它通常比商業數據庫運行得快。遺憾的是,還沒有一種折中的模式:既提供一定程度的數據安全性,又有較快的執行速度。今後的版本將會提供這種模式。 [2] 

PostgreSQL主要特點

PostgreSQL 的 主要優點如下:
  1. 維護者是PostgreSQL Global Development Group,首次發佈於1989年6月。
  2. 操作系統支持WINDOWS、LinuxUNIXMAC OS XBSD
  3. 從基本功能上來看,支持ACID、關聯完整性、數據庫事務、Unicode多國語言。
  4. 表和視圖方面,PostgreSQL支持臨時表,而物化視圖,可以使用PL/pgSQL、PL/Perl、PL/Python或其他過程語言的存儲過程和觸發器模擬。
  5. 索引方面,全面支持R-/R+tree索引、哈希索引、反向索引、部分索引、Expression 索引、GiST、GIN(用來加速全文檢索),從8.3版本開始支持位圖索引。
  6. 其他對象上,支持數據域,支持存儲過程、觸發器、函數、外部調用、遊標
  7. 數據表分區方面,支持4種分區,即範圍、哈希、混合、列表。
  8. 從事務的支持度上看,對事務的支持與MySQL相比,經歷了更為徹底的測試。
  9. My ISAM表處理方式方面,MySQL對於無事務的MyISAM表,採用表鎖定,1個長時間運行的查詢很可能會阻礙對錶的更新,而PostgreSQL不存在這樣的問題。
  10. 從存儲過程上看,PostgreSQL支持存儲過程。因為存儲過程的存在也避免了在網絡上大量原始的SQL語句的傳輸,這樣的優勢是顯而易見的。
  11. 用户定義函數的擴展方面,PostgreSQL可以更方便地使用UDF(用户定義函數)進行擴展。
PostgreSQL 的 應用劣勢如下:
  1. 最新版本和歷史版本不分離存儲,導致清理老舊版本時需要做更多的掃描,代價比較大但一般的數據庫都有高峯期,如果合理安排VACUUM,這也不是很大的問題,而且在PostgreSQL9.0中VACUUM進一步被加強了。
  2. 在PostgreSQL中,由於索引完全沒有版本信息,不能實現Coverage index scan,即查詢只掃描索引,不能直接從索引中返回所需的屬性,還需要訪問表,而OracleInnodb則可以。 [1] 

PostgreSQL存儲系統

存儲系統是PostgreSQL的最底層模塊,它向下通過操作系統接口訪問物理數據,向上為上層模塊提供存儲操作的接口和函數。PostgreSQL對物理數據的訪問和操作都是通過其存儲系統模塊來進行的。
PostgreSQL存儲系統是由以下幾個子模塊所構成的:
  1. 頁面管理子模塊:對PostgreSQL緩衝區頁面的組織結構進行定義以及提供頁面操作的方法。
  2. 緩衝區管理子模塊:管理PostgreSQL的緩衝區,包括本地緩衝區和共享緩衝區。
  3. 存儲設備管理子模塊:數據庫記錄是存儲在存儲介質上的,存儲設備管理子模塊將屏蔽不同物理存儲設備(塊設備,流設備)接口函數的差異,向上層緩衝區管理子模塊提供統一的訪問接口函數。
  4. 文件管理子模塊:一般的操作系統對一個進程允許打開的文件數是有限制的,而PostgreSQL服務器有些時候需要打開的文件數是很多的,因此PostgreSQL文件管理子模塊自身為了突破這個瓶頸,封裝了文件的讀寫操作,在這裏建立了一個LRU鏈表,通過一定的替換算法來對打開的文件進行管理,使得可以打開的文件數目不受操作系統平台的限制。 [3] 

PostgreSQL內存頁面

PostgreSQL內存頁面的默認大小是8kB。頁面的邏輯結構被定義成三個部分:頁首部(PageHeader)、元組記錄空間(ltem Space)以及特殊空間(Special Space)。
頁首部記錄了頁面的使用信息,這些信息由元組記錄空間和特殊空間的偏移量地址、頁面分佈格式版本號和頁面的事物日誌記載點等等所組成。
元組記錄空間是存儲元組信息的地方,在這裏面每個元組記錄被稱為一個ltem,Item由ltemld和元組數據組成,ltemld內部定義了元組在頁面中的偏移量、ltem指針的狀態以及元組項的比特位數長度。
特殊空間是為了頁面操作所需要的。為了其他模塊對頁面進行操作,PostgreSQL內部定義了一些頁面的操作函數。頁面的相關操作包括頁面初始化、頁面添加、修復和刪除。供其他子模塊進行調用。這裏值得關注的是頁面修復與頁面批量刪除的操作函數。為了實現這兩個操作函數,PostgreSQL專門定義了一個數據結構itemldSortData,它為方便在這兩個函數中對元組項Item實現降序排序而定義。 [3] 
參考資料