Help us understand the problem. What is going on with this article?

PostgreSQLのbackup, restore方法まとめ

More than 1 year has passed since last update.

(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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away