PostgreSQL版本快速升級html
寫在前面linux
PostgreSQL9.5版本支持數據分片的功能,爲之後作分佈式考慮,準備將生產環境的9.1版本升級至9.5。中間須要作數據遷移。sql
在遷移操做中,爲保證數據完整性,通常須要在數據庫中止的狀況下進行備份恢復操做,在數據量小的狀況下,經過pg_dumpall的方式備份恢復也是很迅速的,但若是數據量大的狀況,再使用這種方式將會耗去大量的時間,特別在生產環境中,長時間的中止使用數據庫是很是致命的。數據庫
PostgreSQL提供了pg_upgrade的命令用於數據庫版本的升級,使用link模式能夠快速對數據進行遷移操做。分佈式
操做步驟:post
一、安裝新版本數據庫spa
/PATH/TO/postgresql-9.5.1-1-linux-x64.run,根據提示進行數據庫安裝操做。postgresql
二、中止舊版本的數據庫htm
/etc/init.d/postgresql-9.1 stop ,根據實際狀況中止數據庫運行get
三、檢查舊數據的區域支持格式
區域支持在初始化數據庫時被指定,不可更改,所以須要將新的數據庫的區域支持更改爲與舊數據庫同樣,不然pg_upgrade操做會報錯。
a、查看舊數據庫的區域支持,主要是lc-collate,lc-ctype兩個參數,進入數據庫,使用\l,能夠查看
b、使用initdb指定區域支持初始化新的數據庫。
/PATH/TO/9.5/bin/initdb --lc-collate=zh_CN.utf8 --lc-ctype=zh_CN.utf8 --lc-messages=zh_CN.utf8 --lc-monetary=zh_CN.utf8 --lc-numeric=zh_CN.utf8 --lc-time=zh_CN.utf8 -D /PATH/newdata/
四、經過link mode 進行快速的數據庫升級,要使用link模式需確保新舊數據目錄在同一個文件系統底下
先介紹下pg_upgrade的幾個經常使用參數:使用pg_upgrade --help能夠查看詳細參數配置
-d, --old-datadir=DATADIR 指定舊數據文件所在目錄
-D, --new-datadir=DATADIR 指定新數據文件所在目錄
-b, --old-bindir=BINDIR 指定舊版本可執行命令目錄
-B, --new-bindir=BINDIR 指定新版本可執行命令目錄
-k, --link 使用link模式進行更新(即便用硬連接的方式將新數據文件指向舊數據文件的真實存放位置,減去了copy的時間)
/PATH/TO/9.5/bin/pg_upgrade -d /PATH/TO/olddata -D /PATH/TO/newdata -b /PATH/TO/9.1/bin -B /PATH/TO/9.5/bin --link
若沒報錯,則完成。
五、啓動新數據庫
參考: