| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 14. 安裝教學 | Fast Forward | Next |
新版本的PostgreSQL的內部資料儲存格式可能會發生改變。因此, 如果您正在升級一個版本不像"8.0.x"這樣的系統, 您就必須按照這裡說的方法備份和恢復您的資料。 這些教學假設您現有的安裝在 /usr/local/pgsql 目錄裡面, 並且資料區在 /usr/local/pgsql/data。 根據您的情況修改這些路徑。
確保您在備過程中和備份後沒有更新。 雖然即使有資料更新也不會影響備份的完整性,但是很明顯更新的資料會被排除在備份之外, 而它是應該包括進來的。如果有必要, 可以編輯文件/usr/local/pgsql/data/pg_hba.conf (或等效的)文件中的權限以禁止除您之外的所有人的訪問。
pg_dumpall > outputfile
如果您需要保留 OID(比如說當您用到它們做外鍵時),那麼在執行pg_dumpall時帶 -o 選項。
pg_dumpall 並不保存大對象。 如果您要保存大對象,請檢查 Section 22.1.4
要做一個備份,您可以使用您目前正在執行的版本的 pg_dumpall 命令。不過,要獲取最好的結果,最好使用來自 PostgreSQL 8.0.0 的 pg_dumpall,因為這個版本包含對老版本的錯誤修補以及改進。 雖然這個建議看起來好像很愚蠢,因為您還沒有安裝新版本,但如果您準備安裝新版本, 我們還是建議您遵循這個建議。這個時候您可以按照平常那樣完成安裝, 然後再轉換資料。這樣將降低停業時間。
如果您準備把新版本的資料庫裝在與舊資料庫相同的位置,那麼關閉舊的資料庫伺服器,(至少在安裝新文件之前如此):
pg_ctl stop
在那些在引導的時候就啟動 PostgreSQL 的系統上,可能已經有一個啟動文件可以幹這件事。 例如,在一台Red Hat Linux 系統上我們可以找到
/etc/rc.d/init.d/postgresql stop
是可以用的。
非常老的版本上可能沒有 pg_ctl。如果您找不到它或者它不能運轉, 那麼可以找出老伺服器的進程 ID,比如,用下面命令
ps ax | grep postmaster
然後給它發信號讓他停止:
kill -INT processID
如果您準備裝在老版本的地盤,那麼把它們挪走也是一條好計策, 以便您碰到麻煩後還能退回去。用這樣的命令:
mv /usr/local/pgsql /usr/local/pgsql.old
當您裝完 PostgreSQL 8.0.0,建立一個新的資料庫目錄, 然後啟動新伺服器。要記住您必須用特殊的資料庫用戶登錄後才能執行這些命令(如果您是升級的話這個帳戶應該已經存在了)。
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
最後,使用新的 psql, 用下面命令恢復您的資料:
/usr/local/pgsql/bin/psql -d template1 -f outputfile
。
更多內容在下面文件裡: Section 22.4,, 不管怎樣,我們都建議您好好讀一下。