端末でsqlを使用して(ubuntu lucidで)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値はわかりません
それは永遠に失われますか?
すでにコミットされているトランザクションだと思いますか?もしそうなら、それが「コミット」が意味することであり、あなたは戻ることができません。
運が良ければ、一部のデータは回復可能です。今すぐデータベースを停止します。
これは前に同じトピックについて書いた答えです 。お役に立てば幸いです。
これも可能性があります: postgresqlで削除された削除済み行 。
データが絶対に重要でない限り、バックアップから復元するだけで、はるかに簡単で痛みも少なくなります。バックアップがなかった場合は、しっかりと考えてみてください。
間違いを見つけて、データベースを使用しているアプリケーションをすぐに停止してオフラインにした場合、ポイントインタイムリカバリ(PITR)を使用して、先までの書き込みログ(WAL)ファイルを再生できます。誤った取引が行われた瞬間。これにより、データベースは以前の状態に戻り、トランザクションを効果的に「取り消す」ことができます。
本番アプリケーションデータベースへのアプローチとしては明らかな制限がいくつかありますが、特に重要なデータの損失が発生した場合は、PITRが最良のオプションである場合があります。ただし、破損イベントの前にアーカイブがまだ構成されていなかった場合は、意味がありません。
https://www.postgresql.org/docs/current/static/continuous-archiving.html
他のリレーショナルデータベースエンジンにも同様の機能があります。