共找到2條詞條名為PostgreSQL的結果 展開
  • 特性非常齊全的自由軟體的對象-關係型資料庫管理系統
  • 伺服器管理

PostgreSQL

特性非常齊全的自由軟體的對象-關係型資料庫管理系統

PostgreSQL是一種特性非常齊全的自由軟體的對象-關係型資料庫管理系統(ORDBMS),是以加州大學計算機系開發的POSTGRES,4.2版本為基礎的對象關係型資料庫管理系統。POSTGRES的許多領先概念只是在比較遲的時候才出現在商業網站資料庫中。PostgreSQL支持大部分的SQL標準並且提供了很多其他現代特性,如複雜查詢、外鍵、觸發器、視圖、事務完整性、多版本併發控制等。同樣,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提供了兩種可選模式。一種模式保證如果操作系統或硬體崩潰,則數據將保存到磁碟中,這種模式通常比大多數商業資料庫要慢,這是因為它使用了刷新(或同步)方法;另一種模式與第一種不同,它不提供數據保證,但它通常比商業資料庫運行得快。遺憾的是,還沒有一種折中的模式:既提供一定程度的數據安全性,又有較快的執行速度。今後的版本將會提供這種模式。

主要特點


PostgreSQL 的 主要優點如下:
1)維護者是PostgreSQL Global Development Group,首次發佈於1989年6月。
2)操作系統支持WINDOWS、Linux、UNIX、MAC OS X、BSD。
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支持存儲過程,而目前MySQL不支持。因為存儲過程的存在也避免了在網路上大量原始的SQL語句的傳輸,這樣的優勢是顯而易見的。
11)子查詢支持方面,MySQL不支持子查詢。
12)用戶定義函數的擴展方面,PostgreSQL可以更方便地使用UDF(用戶定義函數)進行擴展。
PostgreSQL 的 應用劣勢如下:
1)最新版本和歷史版本不分離存儲,導致清理老舊版本時需要做更多的掃描,代價比較大但一般的資料庫都有高峰期,如果合理安排VACUUM,這也不是很大的問題,而且在PostgreSQL9.0中VACUUM進一步被加強了。
2)在PostgreSQL中,由於索引完全沒有版本信息,不能實現Coverage index scan,即查詢只掃描索引,不能直接從素引中返回所需的屬性,還需要訪問表,而OracleInnodb則可以。

存儲系統


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

內存頁面


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