以下の手順では、既存のインストレーションが/usr/local/pgsqlディレクトリいかにあること、および、そのデータ領域が/usr/local/pgsql/dataであることを前提としています。 適切に環境に合わせ置き換えてください。
PostgreSQLでは、通常メジャーリリース毎に内部的なデータ格納形式が変更されています。 そのため、メジャー番号が"8.4.x"とは異なるインストレーションからアップグレードする場合、データをバックアップし、リストアする必要があります。 PostgreSQL "8.4.x"からアップグレードする場合、新しいバージョンでも現行のデータファイルを使用できます。 このため以下に示すバックアップとリストアは不要ですので、省略すべきです。
バックアップを取る場合、データベースが更新中でないことを確認してください。 バックアップの整合性に影響ありませんが、当然ながら変更されたデータはバックアップに含まれません。 必要に応じ、/usr/local/pgsql/data/pg_hba.conf(または同等ファイル)内のアクセス制限を変更し、想定外のユーザからのアクセスを禁止してください。
データベースインストレーションをバックアップするには、以下のようにします。
pg_dumpall > outputfile
(OIDを外部キーとして使用している場合など)OIDを保持する必要がある場合は、pg_dumpallを実行する時に-oオプションを使用してください。
バックアップを作成するには、現在稼働中のバージョンのpg_dumpallコマンドを使用することができます。 ただし、最高の結果を得るためには、PostgreSQL 8.4.4のpg_dumpallコマンドを使用するようにしてください。 それは、昔のバージョンに比べ、このバージョンではバグ修正や改良が行われているためです。 まだ新バージョンをインストールしていないので、このアドバイスは奇妙に思われるかもしれませんが、新バージョンを旧バージョンと並行してインストールすることを計画している場合には勧める価値があります。 その場合には、普通にインストールを行い、後でデータを移行することができます。 これにより、停止時間も削減できます。
古いサーバを停止してください。
pg_ctl stop
ブート時にPostgreSQLが起動するシステムでは、おそらく上と同じことを行うことができる起動用ファイルが存在します。 例えば、Red Hat Linuxでは、
/etc/rc.d/init.d/postgresql stop
とすることで実現できます。
バックアップからリストアする場合、古いインストレーションディレクトリを変名または削除してください。 問題が発生し元に戻す必要が生じた場合に備え、ディレクトリを削除するよりも名前を変える方をお勧めします。 そのディレクトリが大量のディスク領域を占めている可能性があることに注意してください。 ディレクトリの名前を変更する場合、以下のようなコマンドを使用してください。
mv /usr/local/pgsql /usr/local/pgsql.old
項15.5.に示す概要のように新しいバージョンのPostgreSQLをインストールしてください。
必要に応じ、新しいデータベースクラスタを作成します。 これらのコマンドを実行する時に、特殊なデータベースユーザアカウントでログインしなければならないことを忘れないでください (アップグレードしている場合は既にこのアカウントは存在します)。
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
以前のpg_hba.confに戻してください。 また、postgresql.confにこれまで加えてきた変更を反映させてください。
データベースサーバを起動してください。 繰り返しますが、特殊なデータベースユーザアカウントを使用して作業してください。
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
最後に、新しいpsqlを使用して、データをリストアしてください。
/usr/local/pgsql/bin/psql -d postgres -f outputfile
新しいインストレーションをインストールしている時に以前のインストレーションを使用し続ける方法など、項24.5でより詳細に説明されています。