アットウィキロゴ

PosgreSQL:SELECT文の結果をファイルに保存&復旧

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