ファイヤープロジェクト
バックアップ
2005-01-16T21:00+09:00   matsu
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 データベース名
matsu(C)
Since 2002
Mail to matsu