?
This document uses PHP Chinese website manual Release
這一章討論怎樣把你的遷移數(shù)據(jù)庫數(shù)據(jù)從一個PostgreSQL釋放到一個新的中。 該軟件安裝程序per se不是本節(jié)的主題;這些細節(jié)都在Chapter 15。
代表PostgreSQL主要版本的版本號是前兩個數(shù)字組,例如,8.4。 代表PostgreSQL次要版本的版本號是前三個數(shù)字組,例如,8.4.2是8.4版本的第二個次要版本。 次要版本絕不改變內(nèi)部存儲格式,以及總是總是兼容較早和較晚一些主要版本號的次要版本,比如,8.4.2兼容 8.4,8.4.1和8.4.6。在兩個兼容版本之間更新,當服務器關閉和重啟的時候你只需要更新執(zhí)行文件。數(shù)據(jù)目錄 保持不變—次要升級就那么簡單。
為了major釋放PostgreSQL,內(nèi)部數(shù)據(jù)存儲格式如有變更,這樣升級就會復雜。 移動數(shù)據(jù)到一個新的主要版本的傳統(tǒng)方法是轉儲和重載數(shù)據(jù)庫。另外,less-well-tested可能是 可用的,就像下面討論的。
新的主要版本也通常介紹一些用戶可見的不兼容性,所以應用編程可能被要求改變。謹慎的用戶將會想要 在交換完全之前在新主要版本上測試他們的客戶端應用程序;因此,成立同時安裝新的和舊的版本通常是個好主意。 在測試PostgreSQL主要升級的時候,考慮到可能出現(xiàn)的變化以下幾類:
為管理員提供去監(jiān)聽和掌握服務器的可用功能在每個主要版本里經(jīng)常改變和提升。
通常這包含新的SQL命令指揮能力和不改變行為,除非版本說明中特別提到。
通常像libpq的庫只增加新的功能,除非在在版本說明中提到。
更改系統(tǒng)目錄通常只能影響數(shù)據(jù)庫管理工具。
這涉及到在后端功能的API的變化,那些用C語言編寫的功能。這樣變化影響那些引用服務器深處的后端功能的代碼。
從PostgreSQL的主要版本里轉儲數(shù)據(jù)和用另外的數(shù)據(jù)重載這個版本, 你必須用pg_dump;文件系統(tǒng)級別的備份方法將不起作用。(檢查到位,防止你使用不兼容的PostgreSQL版本數(shù)據(jù)目錄, 所以在數(shù)據(jù)目錄上試著啟動錯誤的服務器版本不會造成很大的傷害。)
我們建議你使用新版本的pg_dump和pg_dumpall以便利用新版本的新特性和功能。 目前版本的轉儲程序最老可以支持到7.0版本的服務器。
最短停業(yè)時間可以這樣實現(xiàn): 把新服務器安裝在不同的目錄然后同時在不同端口運行新舊服務器。 這樣你就可以用類似:
pg_dumpall -p 5432 | psql -d postgres -p 6543
這樣的命令轉移數(shù)據(jù),或者用你選擇的過渡文件也可以。 接著就可以關閉老服務器然后在舊端口啟動新服務器。 你要確保在你運行完pg_dumpall之后沒有更新舊數(shù)據(jù)庫, 否則你顯然會丟失那些數(shù)據(jù)。參閱Chapter 19獲取如何禁止訪問的更多信息。
如果你不能或者不想同時運行兩個服務器。 可以在安裝新服務器之前做好備份,然后停掉舊服務器、移走舊版本、安裝新版本、啟動新服務器、恢復數(shù)據(jù)。 例如:
pg_dumpall > backup pg_ctl stop mv /usr/local/pgsql /usr/local/pgsql.old # Rename any tablespace directories as well cd ~/postgresql-9.0.4 gmake install initdb -D /usr/local/pgsql/data postgres -D /usr/local/pgsql/data psql -f backup postgres
參閱Chapter 17里面啟動和停止服務器以及其它的細節(jié)信息。 安裝指導里面有執(zhí)行這些步驟的建議。
Note: 當你"把舊的安裝移走"之后,它可能就不再可以毫無問題地使用了。 安裝的某些可執(zhí)行程序包含各種安裝的程序和數(shù)據(jù)文件的絕對路徑信息。 這通常算不上什么問題,但是如果你計劃并行使用兩個安裝一段時間, 你應該在編譯的時候給它們賦不同的安裝目錄。 (這個問題在PostgreSQL8.0和更新的版本里是可以糾正的, 只要你移動所有的子目錄中包含安裝文件; 例如,如果/usr/local/postgres/bin/goes to /usr/local/postgres.old/bin/, 則 /usr/local/postgres/share/ 必須go to /usr/local/postgres.old/share/。在8.0之前的版本像這樣的移動安裝將無法正常工作。)
contrib程序pg_upgrade 允許安裝被就地遷移從一個主要PostgreSQL版本到下一個。記住,這個方法不為同時運行的新老版本提供任何范圍。 pg_upgrade比pg_dump需要更少實戰(zhàn)檢驗,所以擁有最新的備份 強烈建議在某種情況下出錯。
它也有可能使用某些復制方法,就像Slony,創(chuàng)建一個PostgreSQL更新版本的備用服務器。 備用可以在同一個或不同的電腦上。一旦它與主服務器同步(運行較舊的PostgreSQL版本),你可以交換 master和使master待機和關閉舊的數(shù)據(jù)庫實例。這樣為升級的開關停機時間只有幾秒鐘。