例えば間違えてレコードを削除してしまった場合、削除レコードはしばらく表面上消されただけの状態なので復元可能。

ただし、大量のデータ処理をした後など、autovacuumが働いてしまったあとなどは無理かも。

pg_controldata /var/lib/pgsql/dataで現在の状態を表示。
/var/lib/pgsql/dataはCentOSでのpostgresのデフォルトのデータ保存場所なので、環境により適宜置き換えてください。

Latest checkpoint's NextXID: のところの数字が現在のトランザクションID。
この数字を減らすと巻き戻しができる。

pg_resetxlog -x 5224810 /var/lib/pgsql/data
など。

実行環境だといろいろとアレなので、一瞬データベースを停止させてdataディレクトリをバックアップして、テストサーバーなどに復元してから解析したほうがいいかも。

自己責任で。




関連 2016-01-12 10:21:31