しゅがーブログ

技術ネタとか書いていけたらな…

PostgreSQL pg_dump

テーブル単位でのdumpのとり方についてまとめていきます。

productionとlocalで同期させるいい方法はないものか・・・
依存関係があまり無いテーブルのリストア方法

テーブル単位のバックアップ

例)
DB名   :fugaDB
テーブル名:user_xxxxxx
ロール名 :hogehoge
サーバIP :54.209.XX.XX

pg_dump -v -h 54.209.XX.XX -d fugaDB -U hogehoge -W -t user_xxxxxx > user_xxxxxx.dump

output file : user_xxxxxx.dump

各種オプション

  • -h:ホスト名
  • -d:データベース名
  • -U:ユーザ名
  • -W:パスフレーズ省略
  • -t:テーブル名

詳細は psql pg_dump

テーブルの復元

取得したテーブルをlocalにrestoreするためにまずlocalのテーブルを削除します。
psqlコマンドでfugaDBを指定してログインします。
その後SQLを発行します。

DROP TABLE hogehoge;

テーブルの削除が完了後、psqlコマンドでデータベース名とアウトプットしたdumpファイルを指定して実行します。

psql -d hogehoge -f user_xxxxxx.dump

依存関係が複雑ではなければこれで問題ないはず・・
複数のテーブルを扱っていて更新頻度が高くい場合などシェルスクリプトにまとめて実行すると楽です。