(2010.11.15) ページを分割。
(2008.5.23追記。)
Linuxディストリビューションを更新 (update) した場合、PostgreSQLのメジャーバージョンが上がることがあります。このときは、データベースのバックアップ、復元(リストア)をおこなわなければなりません。
Fedora Linux では、データベースのデータは、デフォルトで、/var/lib/pgsql ディレクトリ以下に保存されます。
バージョンアップ前に、後述する pg_dump をしておきます。
(2017.7.30) PostgreSQL のバージョンアップが終わったら, initdb します。
Fedora 26 Linux の場合は, rootユーザで次のようにします。
あるいは, 'postgres' UNIXユーザで次のようにするか、
rootで次のようにします。
(2007.7.20更新。)
PostgreSQLのデータベースをバックアップする場合、特定のデータベースのみバックアップする方法と,すべてのデータベースをバックアップする方法があります。
PostgreSQLは、バージョン番号の二つ目の数字が変わると,内部的なデータ保存形式が変更されます。したがって,例えばv7.2.xからv7.3へのアップデートでは,いったんデータベースをすべてバックアップし,新しいバージョンのPostgreSQLをインストールしてから復元する必要があります。
すべてのデータベースをバックアップするには,pg_dumpallコマンドを実行します。
ラージオブジェクト (BLOB, CLOB) もデフォルトで保存されます (Fedora 7 LinuxのPostgreSQLバージョン8.2.4)。以前はラージオブジェクトは保存されなかったように思うのですが、気のせいかもしれません。
一つのデータベースのみをバックアップするときは、pg_dumpコマンドを使います。次のようにします。
あるいはpg_restoreへの入力に適した形式(カスタム形式; 圧縮される)で出力します。
バックアップデータのリストアの仕方は、バックアップデータのデータ形式によって異なります。
pg_dumpall (オプションなし) で生成したファイルは、
pg_dump (オプションなし) で生成したファイルは、データベースを指定して、
カスタム形式で生成したファイルは、pg_restore コマンドで復元します。
あらかじめ、ロール (データベースユーザ), データベースを作成しておかなければなりません。
# PostgreSQLのメジャーバージョンアップ
1. バックアップ
Fedora Linux のバージョンによっては, ディストリビューションのアップグレード後, postgresql-setup --upgrade コマンドで追従できることもある。でも、うまくいくか心配なので、やっぱりバックアップは必須。
2. リストア
# su postgres
$ mv /var/lib/pgsql/data /var/lib/pgsql/data.old
# postgresql-setup --initdb
$ initdb /var/lib/pgsql/data
# /etc/rc.d/init.d/postgresql initdb
# データベースのバックアップ
$ pg_dumpall > 出力ファイル
$ pg_dump mydb > mydb.sql
$ pg_dump -Fc mydb > mydb.dump
# 復元 (リストア)
$ psql -f db.out postgres
$ psql -d newdb -f db.sql
$ pg_restore -h localhost -U postgres -d newdb db.dump