PostgreSQL

PostgresSQLのbackup, restore方法まとめ


(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