pg_upgradeは全データのリロードを行なわずに以前の リリースのPostgresからのアップグレードを行なうユーティリティです。 全てのPostgresリリースにおいて、この方法を 使って移行ができるわけではありません。詳細はインストールに使用した 配布物にあるリリースノートを参照して下さい。
pg_upgradeによるPostgresのアップグレード
なるべく、pg_dumpallを使用して完全なダンプの作成を行って、 既存のデータディレクトリをバックアップして下さい。
次に下記のコマンドを実行し、データ自体を除いた古いバージョンの データベース定義部分をダンプして下さい。
$ pg_dumpall -s >db.out
古いバージョンのpostmasterとバックエンド全てを停止して下さい。
(mvを使って)pgsql以下の古いdata/ディレクトリを data.old/という名前に変更して下さい。
そして下記のコマンドを実行し、新しいバイナリをインストールして下さい。
$ make install
initdbを実行して、新しいリリース用の システムテーブルを含むtemplate1データベースを作成して下さい。
新しいpostmasterを起動して下さい。(注意:必ずアップグレードが完了するまで、 このデータベースにユーザが接続しないようにして下さい。-iオプションを 付けずに起動する、別のpg_hba.confを一時的に使用する、 もしくは、両方を行なうなどして、postmasterを起動する方が良いでしょう。)
作業ディレクトリをpgsqlメインディレクトリに変更し、 下記を実行して下さい。
$ pg_upgrade -f db.out data.oldこのプログラムは全てが適切に設定されているかどうかについての点検を行ない、 そして、db.outスクリプトを実行して古いリリースで作成していた データベースとテーブルを作成します。その時、データ自体はありません。 その後、このプログラムは、data.old/から 適切な data/サブディレクトリへ、システムテーブル以外と インデックスを持つデータファイルを物理的に移動し、db.outスクリプトによって 生成された空のデータファイルを置き換えます。
必要ならば、ユーザがログインできるように、古い pg_hba.confに戻します。
postmasterを停止し、再起動します。
アップグレードされたデータベースの内容を注意深く 確認して下さい。問題を発見した場合、pg_dumpによる完全なバックアップから 戻すという方法で復旧する必要があります。問題がなければ、 data.old/ディレクトリを削除することができます。
アップグレードされたデータベースはゴミ掃除されていない状態に なっています。実運用状態として実行する前に、VACUUM ANALYZE を実行した方が良いでしょう。