必威电竞|足球世界杯竞猜平台

PostgreSQL
來源:互聯網

PostgreSQL是一個功能強大的開源對象關系數據庫系統,已有超過 35 年開發歷史。 創始于1986 年的伯克利的POSTGRES項目。目前已經成為一款跨平臺、免費和開源的數據庫軟件,PostgreSQL 應用領域廣泛,根據 Stack Overflow 2023 開發者調查數據顯示,PostgreSQL 超越了 MySQL,成為開發人員首選。

PostgreSQL 功能和特點:幫助開發人員構建應用程序、保護數據完整性和構建容錯環境,還具有可擴展性。可以定義自己的數據類型、操作符、聚集函數,構建自定義函數,可以用不同的編程語言編寫代碼,而無需重新編譯數據庫。

簡述

PostgreSQL是一個功能非常強大的、源代碼開放的客戶/服務器關系型數據庫管理系統(RDBMS)。PostgreSQL最初設想于1986年,當時被叫做Berkley Postgres Project。該項目一直到1994年都處于演進和修改中,直到開發人員Andrew Yu和Jolly Chen在Postgres中添加了一個SQL(Structured Query Language,結構化查詢語言)翻譯程序,該版本叫做Postgres95,在開放源代碼社區發放。值得一提的是,POSTGRES的許多領先概念只是在比較遲的時候才出現在商業網站數據庫中。1996年,再次對Postgres95做了較大的改動,并將其作為PostgresSQL6.0版發布。該版本的Postgres提高了后端的速度,包括增強型SQL92標準以及重要的后端特性(包括子選擇、默認值、約束和觸發器)。

PostgreSQL是一個非常健壯的軟件包,有很多在大型商業RDBMS中所具有的特性,包括事務、子選擇、觸發器、視圖、外鍵參照完整性和復雜鎖定功能。另一方面,PostgreSQL也缺少商業數據庫中某些可用的特性,如用戶定義的類型、繼承性和規則。從用戶的角度來講,PostgreSQL惟一不具備的主要特性就是外部連接,在今后的版本中會將其加入。

PostgreSQL提供了兩種可選模式。一種模式保證如果操作系統或硬件崩潰,則數據將保存到磁盤中,這種模式通常比大多數商業數據庫要慢,這是因為它使用了刷新(或同步)方法;另一種模式與第一種不同,它不提供數據保證,但它通常比商業數據庫運行得快。遺憾的是,還沒有一種折中的模式:既提供一定程度的數據安全性,又有較快的執行速度。今后的版本將會提供這種模式。

主要特點

PostgreSQL 的 主要優點如下:

1)維護者是PostgreSQL Global Development Group,首次發布于1989年6月。

2)操作系統支持WindowsLinuxunix、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,即查詢只掃描索引,不能直接從索引中返回所需的屬性,還需要訪問表,而Oracle數據庫InnoDB則可以。

存儲系統

存儲系統是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實現降序排序而定義。

參考資料 >

PostgreSQL: The World's Most Advanced Open Source Relational Database.postgresql.2024-03-04

這將是一場災難?37年歷史的PostgreSQL數據庫將進行重大架構變更_數據湖倉_核子可樂_InfoQ精選文章.infoq.2024-03-04

生活家百科家居網