pg_upgrade は、全データの再読み込みを行な わずに以前のリリースの PostgreSQL からのアップグレードを行なうユー ティリティです。 全ての 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 を実行した方が良いでしょう。