2009-11-16 10 views
68

生産時には、データベースのサイズは数百ギガバイトです。開発とテストのために、このデータベースのスナップショットを作成する必要があります。このスナップショットは、機能的に同等ですが、サイズはわずか10または20ギガです。デベロッパースナップショット用のテーブルの一部のみをPostgresでダンプする

私たちのビジネスエンティティのデータは、多くのテーブルに散在しています。フィルタリングされたスナップショットを作成して、のうちの一部のみがダンプに含まれるようにします。こうすることで、毎月、開発者やテストのために新鮮なスナップショットを取得できます。例えば

、我々はこれらの多対多の関係を持つエンティティを持っているとしましょう:

  • 当社は
  • 部門はN従業員
  • 従業員が
Nの出席記録を持っていN部門を持っています

1000社、2500部門、175000人の従業員、数千万の出席記録があります。最初の100社の企業とそれを構成するすべての部門、従業員、および出席者の記録を引き継ぐための複製可能な方法が必要です。

現在、スキーマではpg_dumpを使用していますが、小さなテーブルからすべてのデータを取得するには、--disable-triggersと--data-onlyを指定してpg_dumpを実行してください。私たちは速い開発サイクルを持ち、カスタムスクリプトが壊れやすく、時代遅れになる可能性があるので、データの一部を取り出すカスタムスクリプトを書く必要はありません。

どうすればこのことができますか?データベースから論理パーティションを引き出すのに役立つサードパーティのツールがありますか?これらのツールは何と呼ばれていますか?

一般的なアドバイスもありがとうございます。

答えて

69

...

COPY (SELECT * FROM mytable WHERE ...) TO '/tmp/myfile.tsv' 

COPY mytable FROM 'myfile.tsv' 

https://www.postgresql.org/docs/current/static/sql-copy.html

あなたのプロダクションのサブセット。単体テストを書く場合は、テストに必要な同じデータを使用して、すべての可能なユースケースをヒットさせることができます。

+0

私はOPと同じことをするのに大成功を収めるためにこの手法を使いました。テスト実行のために、私は "テンプレート"データベースにCOPY(SELECT ..)TOの制約付きデータをロードし、CREATE DATABASE test_run_XX TEMPLATE product_snapshot_XXを使用しました。私はもちろん、データを最小限に抑えて、製品のスナップショットのロードとテストDBの作成操作が、チーム障害ではないほど速いようにしました。 – Trey

+1

スナップショットが必要な複数の結合テーブルがある場合は、この方法を使用する方法はありますか? COPY FROMは複数のテーブルのインポートをサポートしていません。 – mlissner

+1

ありがとう@ベン、それは本当に有用です:) –

3

私はすでにこれを行うソフトウェアについては知らないが、私は3つの代替ソリューションを考えることができる。残念ながら、それらはすべてカスタムコーディングを必要とします。

  1. 別のスキーマ内のすべてのテーブルを再作成し、その後、それらのテーブルあなたはINSERT INTO copy.tablename SELECT * FROM tablename WHERE ...を使用して、ダンプし、それをダンプしたいデータのサブセットのみにコピーします。

  2. データをSQL文としてダンプするための独自のスクリプトを作成します。私は過去にこのアプローチを使用しており、PHPの20〜30行のようなものしか取らなかった。

  3. 単一のテーブルをダンプするときに、-tスイッチとともに条件を受け付けるように、pg_dumpを変更します。あなたは、開発データのセットを維持するだけではなく、引っ張って検討すべきである

  4. あなたはサブセットを引き出すためにCOPYコマンドを使用することができ、あなたの大きなテーブルで
2
+3

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 – talonmies

+3

これは本当にここでは意味がありません。 OPは、これを行う第三者ツールの名前を特に求めました。したがって、答えの要点は、「このURLで、これを行う第三者のツール「Jailer」があります」。そのリンク自体は、そのすべての重要な情報を提供します。追加するものは何もありません。そのリンクが機能しなくなったら、「プログラムはJailer」というURLから簡単に推測できます。そのため、リンクを追加することは冗長です。 –

+0

もちろんリンクが壊れてしまったので、googleは何も変わりません。 – owensmartin

関連する問題