生産時には、データベースのサイズは数百ギガバイトです。開発とテストのために、このデータベースのスナップショットを作成する必要があります。このスナップショットは、機能的に同等ですが、サイズはわずか10または20ギガです。デベロッパースナップショット用のテーブルの一部のみをPostgresでダンプする
私たちのビジネスエンティティのデータは、多くのテーブルに散在しています。フィルタリングされたスナップショットを作成して、のうちの一部のみがダンプに含まれるようにします。こうすることで、毎月、開発者やテストのために新鮮なスナップショットを取得できます。例えば
、我々はこれらの多対多の関係を持つエンティティを持っているとしましょう:
- 当社は
- 部門はN従業員
- 従業員が
1000社、2500部門、175000人の従業員、数千万の出席記録があります。最初の100社の企業とそれを構成するすべての部門、従業員、および出席者の記録を引き継ぐための複製可能な方法が必要です。
現在、スキーマではpg_dumpを使用していますが、小さなテーブルからすべてのデータを取得するには、--disable-triggersと--data-onlyを指定してpg_dumpを実行してください。私たちは速い開発サイクルを持ち、カスタムスクリプトが壊れやすく、時代遅れになる可能性があるので、データの一部を取り出すカスタムスクリプトを書く必要はありません。
どうすればこのことができますか?データベースから論理パーティションを引き出すのに役立つサードパーティのツールがありますか?これらのツールは何と呼ばれていますか?
一般的なアドバイスもありがとうございます。
私はOPと同じことをするのに大成功を収めるためにこの手法を使いました。テスト実行のために、私は "テンプレート"データベースにCOPY(SELECT ..)TOの制約付きデータをロードし、CREATE DATABASE test_run_XX TEMPLATE product_snapshot_XXを使用しました。私はもちろん、データを最小限に抑えて、製品のスナップショットのロードとテストDBの作成操作が、チーム障害ではないほど速いようにしました。 – Trey
スナップショットが必要な複数の結合テーブルがある場合は、この方法を使用する方法はありますか? COPY FROMは複数のテーブルのインポートをサポートしていません。 – mlissner
ありがとう@ベン、それは本当に有用です:) –