22.3. リリース間の移行

一般的な規則として、PostgreSQL のメジャーリリース(最初のドットの後の番号の変更)間では内部データ保存形式は変更の対象となっています。 これは、同一メジャーリリースでのマイナーリリースの違い(2番目のドットの次の番号)には当てはまりません。 これらは常に互換性のある保存形式となっています。 たとえばリリース 7.1.1 と 7.1.2 とでは互換正がありますが、7.0.1、7.1.2 と 7.2 には互換性がありません。 互換性のあるバージョン間での更新を行う場合、ただ単にディスク上のデータ領域を新しい実行プログラムで再使用するだけで問題ありません。 互換性がない場合は pg_dump によりデータを"バックアップ"してから新しいサーバに"リストア"する必要があります。 (間違ったことを行わないよう所どころで確認を求められますので、互換性について勘違いをしていても大丈夫です。) 正確なインストール手順はこの節の範疇ではありません。 詳細は 第14章 にあります。

サーバ停止の時間を最短とするには、新しいサーバを違ったディレクトリにインストールし、古いサーバと新しいサーバを異なったポートで並行に稼働させる方法があります。 その後、

pg_dumpall -p 5432 | psql -d template1 -p 6543

このようなコマンドでデータを転送することができます。 または、必要に応じて中間ファイルを使用することができます。 その後、古い方のサーバを停止し、新しいサーバを古いサーバが稼働していたポートで立ち上げます。 この時 pg_dumpallを行った後にデータベースが更新されていないことを確認してください。 さもないとそれらのデータは明らかに消えてしまいます。 接続を拒否する方法は 第19章 を参照してください。 実際にはサーバを交換する前に、クライアントアプリケーションのテストを行うことをお勧めします。

2 つのサーバを並行に稼働できなかったり稼働させたくない場合は、新しいバージョンのインストールを行う前にまずバックアップを行います。 そして、サーバを停止してから古いバージョンをどこかに移動し、新しいバージョンをインストールします。 その後、新しいサーバを立ち上げてデータをリストアしてください。 以下に例を示します。

pg_dumpall > backup
pg_ctl stop
mv /usr/local/pgsql /usr/local/pgsql.old
cd ~/postgresql-7.4.2
gmake install
initdb -D /usr/local/pgsql/data
postmaster -D /usr/local/pgsql/data
psql template1 < backup

サーバを起動/停止させる方法や、その他の詳細は 第16章 を参照してください。 インストール手順ではこれらの手順を実行する戦略場所についての推奨事項が記載されています。

注意: "古いインストレーションをどこかに移動"した場合、もはや完全には使用できません。 インストレーションのある部分には、その他の部分がどこにあるのかの情報を持っています。 これは多くの場合大した問題ではありませんが、2 つのインストレーションをしばらく並行して使用する場合、構築時に異なったインストレーションディレクトリを割り当てなければなりません。