ホーム > フラッグblog > PostgreSQLでバックアップから一部のデータを復旧する
Date 2017/02/12   

PostgreSQLでバックアップから一部のデータを復旧する

お客様からのお問い合わせで、誤ってデータが消えてしまったのでバックアップから復旧できませんか?と問い合わせがありました。

 

幸いデイリーで毎日0時にdumpバックアップを取っていたので、ここから復旧することにします。

しかし、該当のテーブルをすべて戻してしまうと、他のお客さんのデータが巻き戻ってしまいます。

そこで一部のデータだけ差分で復旧出来ないか調べたところ以下の方法で復旧できました。


 

バックアップ複製用のDB作成
(リストア時にパラメータを指定して作ることも出来るみたいです)

cratedb mainDB_20170211

 

バックアップファイルからリストアします

pg_restore -d mainDB_20170211 backup_dump


中身が入っていることを確認します。
(今回はhogehogeテーブルの id = 1000とします)
 

select * from hogehoge where id = 1000)

 

コピーコマンドで該当データだけ、ファイルに抽出します。

 

copy (select * from hogehoge where id = 1000) TO '/temp/1000_restore.csv';


vimで抽出したファイルの先頭に以下を追加します。

 

COPY "hogehoge(テーブル名)" FROM stdin;

 

ファイルの最後に

 

\.

 

を付けて保存。

 

本番dbをバックアップ

pg_dump -Fc mainDB > mainDB_20170201.dump

mainDBに入ってID 1000を消します。

psql mainDB

begin;
delete from hogehoge where id = 1300 ;
commit;

 

 

DBから抜けて、SQL流し込みます

psql mainDB < 1000_restore.csv

以上

この記事をシェアする

TOP

Flagsystem