20

ターミナル(ubuntu lucid)でsqlを使用してPostgreSQLデータベースの一部のレコードを編集しているときに、間違った更新を行いました。

それ以外の -

update mytable set start_time='13:06:00' where id=123;

入力しました-

update mytable set start_time='13:06:00';

したがって、すべてのレコードのstart_time値は同じになります。

この変更を元に戻す方法はありますか?テーブルには500以上のレコードがあり、各レコードのstart_time値が何であったかわかりません

それは永遠に失われますか?

4

2 に答える 2

12

すでにコミットされたトランザクションだったと思いますか?もしそうなら、それは「コミット」が意味するものです、あなたは戻ることはできません。

運が良ければ、一部のデータは回復可能かもしれません。今すぐデータベースを停止します。

これが私が以前に同じトピックについて書いた答えです。お役に立てば幸いです。

これもそうかもしれません:postgresqlで削除された行を取り戻しました

データが絶対的に重要でない限り、バックアップから復元するだけで、はるかに簡単で苦痛が少なくなります。バックアップがなかった場合は、自分がしっかりと動揺していると考えてください。

于 2012-10-14T09:45:54.340 に答える
2

間違いを見つけて、データベースを使用しているアプリケーションをすぐに停止してオフラインにした場合、ポイントインタイムリカバリ(PITR)を使用して、ログ先行書き込み(WAL)ファイルを再生することができます。誤った取引が行われた瞬間。これにより、データベースは以前の状態に戻り、そのトランザクションを効果的に「元に戻す」ことができます。

本番アプリケーションデータベースへのアプローチとして、いくつかの明らかな制限がありますが、特に重大なデータ損失が発生した場合、PITRが利用可能な最良のオプションである可能性がある状況があります。ただし、破損イベントの前にアーカイブがまだ構成されていない場合は、価値がありません。

https://www.postgresql.org/docs/current/static/continuous-archiving.html

他のリレーショナルデータベースエンジンにも同様の機能があります。

于 2018-08-17T07:30:42.687 に答える