2010年11月9日 星期二

PostgreSQL 的版本

這個標題,可能很多人看都不看,就略過這篇文章,就像我在上 PostgreSQL 課程的時候,我的投影片裏有一頁提到查看 PostgreSQL 版本的方法。而這一頁被一些意見比較多的學生私下抱怨,認為我在灌水,增加篇幅。而我想略過不看這篇文章的朋友,大概也是認為這篇文章不重要吧。其實不然,尤其是當你碰到的伺服器,不是由你全新安裝的,而是要幫忙維護的舊系統時,目前所安裝的版本,就要相當當心並注意了!
先提一下,PostgreSQL 安裝時,server 和 client 可以是不同版本。而這種版本的不一致,的確有潛在的危險可能會發生。如果 client 端比較舊,那還無所謂;但是若是 server 端的版本較舊時,你就要當心了。
你想要知道伺服器的版本,那可以從 psql 或 pgAdmin III 直接下 SQL 指令:
postgres=# SELECT version();
即可。如果你使用 psql,等下了指令後,接著會跳出類似下列的結果:
然後你要結束,請按下 q 就可以跳回 psql。看起來這堆資訊似乎「過多」了點。主要的重點在於前面幾個字,也就是 PostgreSQL 8.4.5。在 PostgreSQL 的版本編號,是由 Major.Minor.Maintenance 組成。Major 就是主要版本號碼,Minor 為次要版本編號,Maintenance 則為維護版本編號。其實按照 PostgreSQL 的慣例,只有  Major 是無意義的,PostgreSQL 的版本都是由 Major.Minor 來區分版本版次的。每個版次功能上都會有所不同,資料檔的格式也都多少有變化。而且這些變化在過去 8.x 版間是大得嚇人,等一下我再引用另一篇文章來說明。所以我的另一篇文章「PostgreSQL 在 FreeBSD 上的大版本升級」裏,大版本升級指的就是像 8.2 升級到 8.3 版這樣 Major.Minor 的改版升級。而 Maintenance 則是功能上沒有改變,而是修正被發現的 BUG,尤其出現安全性的漏洞時,會立即更新的版本。所以每當出現新維護版本時,我反而會比較急著通知。相反的,像 9.0 版出來的消息,我反而只是輕描淡寫的帶過。因為功能增加並不意味著有立即升級的急迫性,反而是維護版本的出現,常常是意味著有安全性的漏洞待補。
好了,正式提到主題。為什麼我們接手維護一套舊系統時,知道它的版本版次對管理者那麼重要?先讓我們來看看 PostgreSQL Release Support Policy。這個網頁開宗明義第一段就說了:「The PostgreSQL project aims to fully support a major release for five years, under the terms of the Versioning policy.」喔!原來 PostgreSQL 每一個主要版本只會維護五年!在同一個網頁中,有一個表格,叫做「End Of Life (EOL) dates」,也就是該版次最終維護日期,現在是 2010 年11 月,所以表格目前是這樣的(這篇文章是 2010 年發表,請讀者注意):
Releases which have already reached an EOL release are italicized:
VersionEOL DateRelease Date
PostgreSQL 7.4October 2010 (extended)November 2003
PostgreSQL 8.0October 2010 (extended)January 2005
PostgreSQL 8.1November 2010November 2005
PostgreSQL 8.2December 2011December 2006
PostgreSQL 8.3February 2013February 2008
PostgreSQL 8.4July 2014July 2009
PostgreSQL 9.0September 2015September 2010
Note: Versions 8.1 and earlier are not supported on Windows platforms
這也就難怪目前 PostgreSQL 官方網站的右上角,只有 8.1.22 版以上的版本,已經看不到 8.0 和 7.4 版了:
如果各位有注意到 PostgreSQL 2010-10-05 Security Update 的安全更新通告,會注意到第一段的最後一行有這樣的文字:This is the final update for PostgreSQL versions 7.4 and 8.0. 正式宣告這兩個版本的結束。其實呢,如果按照 PostgreSQL 官方的 Versioning policy 版本控制策略,是早該結束的兩個版次,如今延長到上個月,終於壽終正寢。接著 8.1 版也將在本月宣告結束[1]。所以這幾個版本,即使有安全上的漏洞,將來也不會再去維護、更新,這樣對於在線上的服務而言,是相當危險的事,所以要早早規劃大版本的更新。
事實上,不僅是因為版本控制策略,讓我們非得注意版本的更新。在 8.0 到 8.3 版,這四個版本當中,資料庫核心內部其實也私下做了相當大的變革。我們來看看一篇發表於去年(2009)九月底的一篇報告:PostgreSQL history。這篇文章的標題和目前你在看的這篇文章一樣,會讓你誤以為在介紹 PostgreSQL 早期的歷史,其實不是,它是在介紹從 8.0 版到 8.4 版間的變革。內容詳情,請各位自行點閱,我們來看這篇文章的結論。這篇文章的作者,把 8.0 到 8.4 這五個版本,一一的跑測試數據,得到了兩個表格:

PostgreSQL RO OLTP performance
 Peak TPSPeak performance at # of clients
8.0.2112564
8.1.17562014
8.2.13810918
8.3.71398422
8.4.11354622

PostgreSQL RW OLTP performance
 Peak TPSPeak performance at # of clients
8.0.213612
8.1.1787310
8.2.13135814
8.3.7279518
8.4.1271312
 有沒有注意到,從 8.0 到 8.3 版,效能上已經提昇五點五倍到將近九倍!雖然到了 8.4 版因為一些安全的因素,又把一些功能改變,而讓 RW OLTP 的整體效能又降低了一些,但是還是比 8.0 版快上六倍!所以說,在 8.3 版以前的使用者,應該要早日把系統昇級到最新版本,以得到最好的效能。
好了,恭喜你看到這篇文章。如果你的系統還在 8.3 版以前的,請趁現在一口氣昇到最近的 9.0.1 版吧。搭配 9.0.1 版的 pgAdmin III 1.12 版,有革命性的功能增加,真的值得你去安裝。當然囉,如果你的系統是裝在 Ubuntu 上,那麼你應該目前還只能安裝到 8.4.5 版。最近的 9.0.x 版,必須等到下一個版本 11.04 版 Armel,才會一起出現。如果忍不到那時候的話,那就先昇級到 8.4.5 版吧。

沒有留言:

張貼留言

用 Claude 在 PsotgreSQL 的 Docker Container 中建立一個 database

Claude 是一個很強的 AI 工具,大概是我用過唯一可以和 Gemini 挑戰的 AI 工具。 它對於程式設計的能力相當強大。我這個測試證明了,不止程式設計能力很強,連資料庫的整個架構能力也是很嚇人的。 之前,我不是在 Proxmox VE 上建了一個 Zorin OS 的 ...