PostgreSQLの新しいリリースでは、内部的なデータ格納形式が変更されています。 そのため、メジャー番号が"8.2.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コマンドを使用することができます。 ただし、最高の結果を得るためには、PostgreSQL 8.2.6のpg_dumpallコマンドを使用するようにしてください。 それは、昔のバージョンに比べ、このバージョンではバグ修正や改良が行われているためです。 まだ新バージョンをインストールしていないので、このアドバイスは奇妙に思われるかもしれませんが、新バージョンを旧バージョンと並行してインストールすることを計画している場合には勧める価値があります。 その場合には、普通にインストールを行い、後でデータを移行することができます。 これにより、停止時間も削減できます。
古いものと同じ場所に新しいバージョンをインストールする場合は、少なくとも新しいファイルをインストールする前に、古いサーバを停止してください。
pg_ctl stop
ブート時にPostgreSQLが起動するシステムでは、おそらく上と同じことを行うことができる起動用ファイルが存在します。 例えば、Red Hat Linuxでは、
/etc/rc.d/init.d/postgresql stop
とすることで実現できます。
古いバージョンと同じ場所にインストールする場合、もし問題があった場合に元に戻さなければなりませんので、古いインストレーションを他の場所に移動することもお勧めします。 以下のようなコマンドを使用してください。
mv /usr/local/pgsql /usr/local/pgsql.old
PostgreSQL 8.2.6のインストールの後、新しいデータベースディレクトリを作成し、新しいサーバを起動してください。 これらのコマンドを実行する時に、特殊なデータベースユーザアカウントでログインしなければならないことを忘れないでください (アップグレードしている場合は既にこのアカウントは存在します)。
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
最後に、新しいpsqlを使用して、データをリストアしてください。
/usr/local/pgsql/bin/psql -d postgres -f outputfile
項23.5で詳細に説明されていますので、必ず読むことをお勧めします。