| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 22. 備份和恢復 | Fast Forward | Next |
本節討論如何把您的資料庫資料從一個 PostgreSQL 版本遷移到一個更新的版本上。 軟件安裝步驟本身不是本節的論題;它們的細節在 Chapter 14 裡。
通常,不同主版本的 PostgreSQL 之間的內部儲存結構經常做改變 (第一個點後面的數字變化)。 這個情況不會在不同的子版本裡面發生(第二個點後面的數字變化)。它們通常用的都是兼容的儲存格式。 比如,版本 7.0.1,7.1.2 和 7.2 是不兼容的,而 7.1.1 和 7.1.2 是兼容的。如果您在兼容的版本之間升級,那您只需要簡單地用新的可執行文件替換原來的並且使用原來的磁盤儲存區上就行了。 否則,您需要用 pg_dump 備份您的資料,然後到新的伺服器裡恢復它們; 文件系統級別的備份明顯是不適用的。 系統裡有一些位置有錯誤檢查,可以防止您使用不兼容的 PostgreSQL 版本的資料區, 因此就算混淆這些事情也不會造成什麼損害。
我們建議您使用新版本的 pg_dump 程序, 以便利用新版本的 pg_dump 新特性和功能。 目前版本的轉儲程序可以支援到最老 7.0 的伺服器版本。
最短停業時間(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.8.0.0 gmake install initdb -D /usr/local/pgsql/data postmaster -D /usr/local/pgsql/data psql < backup
參閱 Chapter 16 ,裡面有啟動和停止伺服器以及其他細節訊息。 安裝教學裡面有執行這些步驟的戰略位置的建議。
注意: 當您"把舊的安裝移走"之後,它就可能不再可以毫無問題地使用了。 安裝的某些可執行程序包含各種安裝的程序和資料文件的絕對路徑訊息。這通常算不上什麼問題, 但是如果您計劃並行使用兩個安裝一段時間,您應該在製作的時候給它們賦不同的安裝目錄。 (這個問題在 PostgreSQL 8.0 和更新的版本裡是可以糾正的, 不過在老版本上,您可得小心。)