14.4. アップグレードする場合

PostgreSQL の新しいリリースでは、内部的なデータ格納形式が変更されています。 そのため、メジャー番号が "7.4.x" とは異なるインストレーションからアップグレードする場合、ここで説明する通りにデータをバックアップし、リストアする必要があります。 ここでは、これまでのインストレーションが /usr/local/pgsql ディレクトリ以下にあり、データ領域が /usr/local/pgsql/data であることを前提とします。 パスを適切に置き換えて下さい。

  1. バックアップの前後でデータベースが更新されないことを確実にして下さい。 これはバックアップの一貫性には影響ありませんが、当然ながら、更新されたデータがバックアップには含まれません。 必要ならば、/usr/local/pgsql/data/pg_hba.conf (または同等ファイル) 内の権限を変更して、他のユーザからのアクセスを禁止して下さい。

  2. データベースインストレーションをバックアップするには、以下のようにします。

    pg_dumpall > outputfile

    (OID を外部キーとして使用している場合など) OID を保持する必要がある場合は、pg_dumpall を実行する時に -o オプションを使用して下さい。

    pg_dumpall はラージオブジェクトを保存しません。 保存が必要な場合は、項22.1.4を参照してください。

    バックアップを作成するには、現在稼働中のバージョンの pg_dumpall コマンドを使用することができます。 ただし、最高の結果を得るためには、PostgreSQL 7.4.2 の pg_dumpall コマンドを使用するようにしてください。 それは、昔のバージョンに比べ、このバージョンではバグ修正や改良が行われているためです。 まだ新バージョンをインストールしていないので、このアドバイスは奇妙に思われるかもしれませんが、新バージョンを旧バージョンと並行してインストールすることを計画している場合には勧める価値があります。 その場合には、普通にインストールを行い、後でデータを変換することができます。 これにより、不稼働時間も削減できます。

  3. 古いものと同じ場所に新しいバージョンをインストールする場合は、少なくとも新しいファイルをインストールする前に、古いサーバを停止してください。

    kill -INT `cat /usr/local/pgsql/data/postmaster.pid | sed 1q`

    7.0 より前のバージョンでは、postmaster.pid ファイルはありません。 こういったバージョンを使用している場合は、サーバのプロセス ID を調べなければなりません。 例えば、ps ax | grep postmaster と入力し、その結果を使用して kill コマンドを実行してください。

    ブート時に PostgreSQL が起動するシステムでは、おそらく上と同じことを行うことができる起動用ファイルが存在します。 例えば、Red Hat Linux では、

    /etc/rc.d/init.d/postgresql stop

    とすることで実現できます。 この他にも、pg_ctl stop を使用することができます。

  4. 古いバージョンと同じ場所にインストールする場合、もし問題があった場合に元に戻さなければなりませんので、古いインストレーションを他の場所に移動することもお勧めします。 以下のようなコマンドを使用して下さい。

    mv /usr/local/pgsql /usr/local/pgsql.old

PostgreSQL 7.4.2 のインストールの後、新しいデータベースディレクトリを作成し、新しいサーバを起動して下さい。 これらのコマンドを実行する時に、特殊なデータベースユーザアカウントでログインしなければならないことを忘れないで下さい (アップグレードしている場合は既にこのアカウントは存在します)。

/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.3で詳細に説明されていますので、必ずお読みになることをお勧めします。