今回はPostgreSQLでデータベースをダンプする方法についてご紹介します。
データベースをコピーしたり、バックアップを取ったりする時に使用することになるかと思います。
PostgreSQLではダンプをするのにpg_dumpとpg_dumpallコマンドを使用します。これらのコマンドはPostgresの稼働中に実行可能で、ユーザからのアクセスに影響は与えません。
以下、実行環境です。
$ psql --version psql (PostgreSQL) 9.3.5 $ pg_ctl status -D ./data pg_ctl: server is running (PID: 2168) /usr/pgsql-9.3/bin/postgres "-D" "./data"
データベースを指定してダンプする – pg_dump
データベース単位でダンプをする場合はpg_dumpを使用します。
pg_dumpはオプションでダンプの形式を3種類指定することができます。
- -Fp
- plain形式(SQL)でのダンプ。
- -Fc
- カスタム形式でのダンプ。実際にバックアップを取る場合はカスタム形式が一般的かと思います。
- -Ft
- tar形式でのダンプ。
下記の例ではデータベースクラスタ内のtestdbを平文形式でダンプしています。
$ pg_dump testdb
オプションを指定しない場合は-Fpオプションがデフォルトで使用されます。
ダンプのファイルを作成する場合は-fオプション、または>によるリダイレクトを使用します。
カスタム形式、tar形式の場合も同様です。
$ pg_dump -Fp testdb -f testdb.sql $ pg_dump -Fp testdb > testdb.sql
以下、カスタム形式とtar形式によるダンプです。
$ pg_dump -Fc testdb -f testdb.dump $ pg_dump -Ft testdb -f testdb.tar
データベースクラスタ全体をダンプする – pg_dumpall
データベースクラスタ内全てのデータベースをダンプする場合はpg_dumpallを使用します。
pg_dumpallを使用する場合は形式を指定することができません。全て平文形式でのダンプになります。
$ pg_dumpall -f all.sql
ダンプしたデータベースをリストアする
pg_dump -Fp、pg_dumpallで平文形式にダンプしたファイルは通常のSQLとなるので、psqlコマンドによりリストアすることができます。
$ psql -f testdb.sql
pg_dump -Fcによるカスタム形式やpg_dump -Ftのtar形式の場合はpg_restoreコマンドを使用してリストアします。
-dオプションでリストア先のデータベースを指定し、実行します。
$ pg_restore -d hogedb testdb.dump
以上、いかがでしたか。
他にもバックアップ方法はありますが、pg_dumpは比較的簡単にできるダンプ方法ですので実践してみてください。
コメント