先提一下,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:
| Version | EOL Date | Release Date |
|---|---|---|
| PostgreSQL 7.4 | October 2010 (extended) | November 2003 |
| PostgreSQL 8.0 | October 2010 (extended) | January 2005 |
| PostgreSQL 8.1 | November 2010 | November 2005 |
| PostgreSQL 8.2 | December 2011 | December 2006 |
| PostgreSQL 8.3 | February 2013 | February 2008 |
| PostgreSQL 8.4 | July 2014 | July 2009 |
| PostgreSQL 9.0 | September 2015 | September 2010 |
這也就難怪目前 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 這五個版本,一一的跑測試數據,得到了兩個表格:
| Peak TPS | Peak performance at # of clients | |
| 8.0.21 | 1256 | 4 |
| 8.1.17 | 5620 | 14 |
| 8.2.13 | 8109 | 18 |
| 8.3.7 | 13984 | 22 |
| 8.4.1 | 13546 | 22 |
| Peak TPS | Peak performance at # of clients | |
| 8.0.21 | 361 | 2 |
| 8.1.17 | 873 | 10 |
| 8.2.13 | 1358 | 14 |
| 8.3.7 | 2795 | 18 |
| 8.4.1 | 2713 | 12 |
好了,恭喜你看到這篇文章。如果你的系統還在 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 版吧。


