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