データベースの完全バックアップを毎晩行い、そのダンプを使用して独自の dev-db を作成します。dev-db の作成には約 10 分かかるため、毎朝、仕事に行く前に cron によってスケジュールされます。そのため、ほぼライブのデータベースで作業できるようになりました。
しかし、私が物事をテストしているときは、データベース全体または特定のテーブルだけを最初のバックアップにロールバックすると便利な場合があります。もちろん、dev-db を完全に再作成することもできますが、テストを再度実行するまでにさらに 10 分間待たなければなりません。
データベース/テーブルを特定の時点またはダンプから復元/巻き戻す簡単な方法はありますか?
pg_restore
特定のテーブルを復元するために、次のように使用しようとしました。
pg_restore -d my-dev-db -n stuff -t tableA -t tableB latest-live-db.dump
-c
や などのオプションも試しました--data-only
。しかし、ここには、私が予見できなかったいくつかの問題があるようです。
- 復元されたデータがコピーバックされるとき、古いデータは自動的に削除されません。
- 復元の前に FK を明示的に削除してから再度追加しなければ、これを不可能にする外部キー制約がいくつかあります (間違っている場合は修正してください)。
- 順不同になる PK シーケンスは、この時点ではまったく関係ありませんが、それも問題になる可能性があります。
編集:私がテスト/調査したその他のこと:
pg_basebackup
- より強力な代替手段
pg_basebackup
は、db-server を停止し、db-files をコピーしてから、db-server を起動することです。
上記の代替案はどちらも失敗します。これは、同じクラスターで複数のローカル データベースを実行していて、合計するとディスク上に大量のデータが存在するためです。このようにデータベースを分離する方法はありません! したがって、ここでのファイル コピー操作では速度は向上しません。