22.3. 在不同版本之間遷移

通常,不同版本的 PostgreSQL 之間的內部存儲結構經常做改變。 這個情況不會在不同的"補丁級別(patch levels)"裡面發生。 它們通常用的都是兼容的存儲格式。 比如,版本 7.0.1,7.1.2 和 7.2 是不兼容的,而 7.4:.1 和 7.4:.2 是兼容的。如果你在兼容的版本之間升級,那你只需要簡單地把新的可執行文件應用在原來的磁盤存儲區上就行了。 否則,你需要"備份"你的數據,然後到新的服務器裡"恢復"它們。 (這些步驟裡有錯誤檢查,可以防止你做錯事,因此就算混淆這些事情也不會造成什麼損害。) 準確的安裝過程不是本章的內容,這些細節在 Chapter 14 裡面。

最短停業時間(downtime)可以這樣實現:把新服務器安裝在不同的目錄然後同時在不同端口並行運行舊的和新的服務器。 這樣你就可以用類似

pg_dumpall -p 5432 | psql -d template1 -p 6543

這樣的命令轉移數據,或者用你選擇的過渡文件。 然後你就可以關閉老服務器然後在舊端口啟動新服務器。 你要確保在你運行完pg_dumpall之後沒有更新數據庫, 否則你顯然會丟失那些數據。 參閱 Chapter 19 獲取如何禁止訪問的更多信息。 實際上你在切換之前可能還要測試你的客戶端應用。

如果你不能或者不想同時運行兩個服務器。你可以在安裝新服務器之前做備份工作, 然後停掉服務器,移走舊版本的東西,安裝新版本,啟動服務器,恢復數據。例如:

pg_dumpall > backup
pg_ctl stop
mv /usr/local/pgsql /usr/local/pgsql.old
cd ~/postgresql-7.7.4
gmake install
initdb -D /usr/local/pgsql/data
postmaster -D /usr/local/pgsql/data
psql < backup

參閱 Chapter 16 ,裡面有啟動和停止服務器以及其他細節信息。 安裝指導裡面有執行這些步驟的戰略位置的建議。

注意: 當你"把舊的安裝移走"之後,它就不再可以毫無問題地使用了。 安裝的某些部分包含其他部分所處位置的信息。這通常算不上什麼問題, 但是如果你計劃並行使用兩個安裝一段時間,你應該在制作的時候給它們 賦不同的安裝目錄。