PostgresSQLのbackup, restore方法まとめ

  • 196
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

(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