(1) PostgreSQLのダンプツールを利用したバックアップ
pg_dumpコマンド
DBを運用しながらでも使えるbackupコマンド
中ではトランザクションブロック内でSELECT文を発行し、取得したデータを出力形式に合わせて整形した腕標準出力に出力
するらしい。
pg_dumpの出力形式
- スクリプト形式(デフォルト)
- アーカイブ形式
が選択できる。
スクリプト形式
スクリプト形式の出力は、リストアに必要なSQL文の羅列が出る。
ので、psql
コマンドでリストアする。
スクリプト形式の場合はプレーンテキストなので、リストアの際にエラーが出たら、中を見れるという利点がある。
アーカイブ形式
バイナリの形で出力される。リストアはpsql
コマンドでなくpg_restore
コマンドで行う。
アーカイブ形式の利点は、 **「指定したtableのみを選択してリストアできる」**ことらしい。
また、アーカイブ形式には
- custom形式
- tar形式
の2種類がある。custom形式はデフォで圧縮されるのでファイルサイズが小さい。
pg_dumpの使い方からリストアの方法まで
スクリプト形式
バックアップをとる
$ pg_dump database名 > backup_file名
また、pg_dumpはローカルだけでなくリモートからも実行できる
$ pg_dump -h hostname -p port database名 > backup_file名
リストアは次のように行う
$ psql database名 < backup_file名
アーカイブ形式
バックアップをとる
$ pg_dump -Fc database名 > backup_file名
-Fオプションを付ければ良い。
-cはcustom形式を表す。-tとするとtar形式になる
リストアは次のように行う
$ pg_restore -C -d postgres バックアップファイル名
-C オプションを付けるとリストア前にデータベースを作成し、-d オプションは、その際に接続するデータベース名を指定
[使用例]
pg_restore -d support -Ft -c ./support.tar
pg_dumpallの使い方
pg_dumpコマンドでは、globalデータと呼ばれるロールやテーブルスペースなどの情報はバックアップされないが、pg_dumpall
を使えばそれらも全てコピーする。ただし、 **-Fオプションは使えない。**常にスクリプト形式となる。
詳細
[pg_dumpの主なオプション]
-a データのみをダンプ
-b ラージオブジェクトもダンプする。(注: デフォルトではダンプされません)
-d INSERTコマンドにてダンプ(通常はCOPYコマンド)
-D カラム名を含めたINSERTコマンドにてダンプ
-s テーブルのみダンプ
-t 特定のテーブルのみダンプ
-F アウトプットファイルの形式を指定(cがカスタム、tがtar、pがテキスト)
[pg_restoreの主なオプション]
-c データベースの作成前にテーブルなどをドロップする。
-F バックアップファイルの形式を指定(cがカスタム、tがtar、pがテキスト)
-d データベース名を指定
参考サイト
使えば分かるPostgreSQL運用&チューニング(4):PostgreSQLのバックアップ&リストア手法その1 (2/3) - @IT