pg_dump -t テーブル名 だと、テーブル全体をバックアップしてしまうので、
必要なデータだけSQL文で取り出し、ファイルに保存する。
psql データベース名
psql> \pset format unaligned
psql> \pset fieldsep '\t'
psql> \o ファイル名
psql > SELECT * FROM テーブル名 WHERE ...
とすると、ファイル名に結果がタブ区切りで保存される。
先頭の1行目はカラム名になっており、復旧時の邪魔になるので削る。
sed '1d' ファイル名 > ファイル名.new
「sed '1d'」は、「先頭行を削除」の意味。これで、
psql> COPY テーブル名 FROM ファイル名.new
で、抽出したデータを復旧できる。ただし、重複などのエラーが発生すると
すべて無効となるので、対象データは「消えている」ことが条件。
psql > DELETE FROM テーブル名 WHERE ...
最終更新:2011年03月08日 17:40