バックアップ
DBに格納するデータは多くの場合,重要で代替の効かないものが多いように思われる.そこで,PostgreSQLでのバックアップ方法について調べてみた.
pg_dumpは指定したデータベースを構築するための一連のSQLを出力する.
pg_dump データベース名デフォルトでは標準出力に出力するので,ファイルなどにリダイレクトするか,-fオプションで出力ファイルを指定する.pg_dumpはリモートホストからでも利用可能だが,バックアップするDB内の全てのテーブルに対し,読み取り権限が必要である.リモートから実行する場合は,-hオプションでDBサーバを指定する.
pg_dump -h サーバ データベース名pg_dumpには以下のような注意点がある.
- OID
- pg_dumpはデフォルトではOIDをダンプしない.スキーマがOIDに依存している場合は-oオプションを指定してOIDもダンプするように指定する.逆にスキーマがOIDに依存しないなら,不要なデータなので指定しない.
- ラージオブジェクト
- pg_dumpはデフォルトではラージオブジェクトもダンプしない.ラージオブジェクトをダンプするには-bオプションを指定する.更に-F cを指定するとよいらしい.
- -c
- 出力の最初に,テーブルを削除するSQL文を作成する.リストア前にデータベースをきれいにしたい場合には,便利だろう.
- -d
- pg_dumpはデフォルトではINSERT文ではなくCOPY文を出力する.COPYは標準SQLにはないので,別DBに移行したい場合には困る.-dオプションを指定すると,COPY文ではなくINSERT文で出力してくれる.
- 巨大なDBのバックアップ
- DBが巨大だと,pg_dumpの出力も巨大になる.すると,ダンプファイルのサイズも巨大になる.そこで,圧縮や分割が必要になる場合がある.
pg_dump dbname | gzip > ファイル名 pg_dump dbname | split -l 行数 - ファイル名プレフィクス
pg_dumpの出力ファイルを使用してDBをリストアするには,あらかじめcreatedbした上で以下のようにする.
psql -f バックアップファイル -d データベース名 cat バックアップファイル | psql -d データベース名 gunzip -c バックアップファイル | psql -d データベース名

