標籤:
參考:http://www.postgresql.org/docs/current/static/pgupgrade.html
從低版本升級到 新版本,有幾種可選的方案。一是使用pg_dump/pg_restore,該方法比較耗時,也即是停機時間比較長,特別是大資料量下,但是 穩定且易於操作。二是和MySQL那樣利用複製的方式,停機時間短,但操作相對複雜。第三種就是利用pg_upgrade,重建系統資料表,相對停機時間較短。
1. 文法
pg_upgrade -b oldbindir -B newbindir -d olddatadir -D newdatadir [option...]
2. 原理
根據官方文檔介紹,PostgreSQL 每次升級主要體現在系統資料表的改變,對於資料檔案的格式基本不做改動,因此利用這個特性,只要重建所有系統資料表,複用原有資料檔案,即可完成升級。對於 8.4.X後的每一次大版本升級都適用。需要注意的是,即便如此,該方法也有一定的限制,在官方文檔的NOTE部分有詳細說明。
1. 編輯postgresql.conf,修改舊資料庫連接埠為5433
2. 安裝新版PostgreSQL
3. 停止新舊資料庫服務
sudo service postgresql stop
4. 驗證相容性
/usr/lib/postgresql/9.4/bin/pg_upgrade --old-datadir=/var/lib/postgresql/9.3/main/ --new-datadir=/var/lib/postgresql/9.4/main/ --old-bindir=/usr/lib/postgresql/9.3/bin/ --new-bindir=/usr/lib/postgresql/9.4/bin -p5433 -P5432 -o"-c config_file=/etc/postgresql/9.3/main/postgresql.conf" -O"-c config_file=/etc/postgresql/9.4/main/postgresql.conf" -c
5. 升級
/usr/lib/postgresql/9.4/bin/pg_upgrade --old-datadir=/var/lib/postgresql/9.3/main/ --new-datadir=/var/lib/postgresql/9.4/main/ --old-bindir=/usr/lib/postgresql/9.3/bin/ --new-bindir=/usr/lib/postgresql/9.4/bin -p5433 -P5432 -o"-c config_file=/etc/postgresql/9.3/main/postgresql.conf" -O"-c config_file=/etc/postgresql/9.4/main/postgresql.conf"
6. 執行指令碼重建統計資訊,刪除舊資料庫(可選)
./analyze_new_cluster.sh./delete_old_cluster.sh
PostgreSQL 利用pg_upgrade升級版本