PostgreSQL の新しいリリースでは、内部的なデータ格納形式が変更されています。 そのため、メジャー番号が "8.0.x" とは異なるインストレーションからアップグレードする場合、ここで説明する通りにデータをバックアップし、リストアする必要があります。 ここでは、これまでのインストレーションが /usr/local/pgsql ディレクトリ以下にあり、データ領域が /usr/local/pgsql/data であることを前提とします。 パスを適切に置き換えてください。
バックアップの前後でデータベースが更新されないことを確実にしてください。 これはバックアップの一貫性には影響ありませんが、当然ながら、更新されたデータがバックアップには含まれません。 必要ならば、/usr/local/pgsql/data/pg_hba.conf (または同等ファイル) 内の権限を変更して、他のユーザからのアクセスを禁止してください。
データベースインストレーションをバックアップするには、以下のようにします。
pg_dumpall > outputfile
(OID を外部キーとして使用している場合など) OID を保持する必要がある場合は、pg_dumpall を実行する時に -o オプションを使用してください。
pg_dumpall はラージオブジェクトを保存しません。 保存が必要な場合は、項22.1.4を参照してください。
バックアップを作成するには、現在稼働中のバージョンの pg_dumpall コマンドを使用することができます。 ただし、最高の結果を得るためには、PostgreSQL 8.0.4 の pg_dumpall コマンドを使用するようにしてください。 それは、昔のバージョンに比べ、このバージョンではバグ修正や改良が行われているためです。 まだ新バージョンをインストールしていないので、このアドバイスは奇妙に思われるかもしれませんが、新バージョンを旧バージョンと並行してインストールすることを計画している場合には勧める価値があります。 その場合には、普通にインストールを行い、後でデータを変換することができます。 これにより、不稼働時間も削減できます。
古いものと同じ場所に新しいバージョンをインストールする場合は、少なくとも新しいファイルをインストールする前に、古いサーバを停止してください。
pg_ctl stop
ブート時に PostgreSQL が起動するシステムでは、おそらく上と同じことを行うことができる起動用ファイルが存在します。 例えば、Red Hat Linux では、
/etc/rc.d/init.d/postgresql stop
とすることで実現できます。
非常に古いバージョンにはpg_ctlはありません。 見つからない場合やうまく動作しない場合は、例えば、
ps ax | grep postmaster
と入力して古いサーバのプロセスIDを探し、そして、
kill -INT processID
のように停止用のシグナルを送ってください。
古いバージョンと同じ場所にインストールする場合、もし問題があった場合に元に戻さなければなりませんので、古いインストレーションを他の場所に移動することもお勧めします。 以下のようなコマンドを使用してください。
mv /usr/local/pgsql /usr/local/pgsql.old
PostgreSQL 8.0.4 のインストールの後、新しいデータベースディレクトリを作成し、新しいサーバを起動してください。 これらのコマンドを実行する時に、特殊なデータベースユーザアカウントでログインしなければならないことを忘れないでください (アップグレードしている場合は既にこのアカウントは存在します)。
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
最後に、新しい psql を使用して、データをリストアしてください。
/usr/local/pgsql/bin/psql -d template1 -f outputfile
項22.4で詳細に説明されていますので、必ずお読みになることをお勧めします。