web-dev-qa-db-ja.com

テーブルデータのサブセットを運用データベースからローカルのテストデータベースにエクスポートするにはどうすればよいですか?

比較的大きな量のpostgresベースのデータベースがあります:〜20GB。 PostgreSQLデータベースはherokuでホストされています。

テーブルデータの小さなサブセットをローカルデータベースにコピーして、本番環境で作業することなく、それらに対していくつかのテストを実行したいと考えています。

自分でサンプルデータを生成するのではなく、本番環境にすでに存在するデータを使用します。

データベース内の各テーブルから最大100行で十分です。これを達成する簡単な方法はありますか?

10
jottr

私はこのツールを使用していませんが、Jailerはそれを行うと約束しています

データベースのサブセット化および参照ツール。リレーショナルデータベース(JDBC)から一貫性のある、参照用に損なわれていない行セットをエクスポートする

http://sourceforge.net/projects/jailer/

別のオプションは、私が最近遭遇したものです(当然、私はまだ使用していませんが、すぐに使用する予定です): rdbms-subsetter

Jailerよりも少しシンプルで軽量で、いくつかの素晴らしい機能/特典があります。

  • CLIは既存のツールに簡単に接続できます
  • オープンソース
  • 外部キーに従い、データのコヒーレントサブセットをフェッチします
    • 明確に定義された外部キーがない場合、関係はJSON構成ファイルを介して提供できます。私の場合、他の場所に保存されているスキーマメタデータからこの構成を生成する予定です(ありがとう、Rails:\)
  • 特定の行をターゲットにして、all関連レコードを取得できます(たとえば、特定の顧客が問題を抱えているため、すべてをプルダウンしてアカウントを機能させることができます)ローカルでアクセス可能)
  • テーブルごとに一定数のレコードを取得するか、対数を使用して、過剰な処理をせずに大きなテーブルからより多くのデータを取得できます。

Herokuデータベースの別のオプションについて具体的に説明することは価値があります。これは、私が頻繁に使用したものです(以前はそこで働いていました)。

Herokuは、先読みログを最初にプルして準備し、次にプライマリDBに接続して追いつき、追跡を停止するため、新しいスナップショットDBの立ち上げはかなり高速です。アプリ全体にこれらの「フォーク」を作成して、制作にあまり影響を与えないようにすることができます。

$ heroku addons:create heroku-postgres[:specific-plan] \
    --fork your-production-app::DATABASE \
    --app some-other-app-to-own-forked-database \
    [--as PRODUCTION_SNAPSHOT]

次に、そのスナップショットを指すローカルでアプリを起動できます。私はこれを頻繁に使用して、データまたはスキーマの移行の予行演習を行ったり、顧客の問題をデバッグしたりします。

上記のコマンドで、DATABASE_URLyour-production-appを使用してアクセス可能なDBがある場合、PRODUCTION_SNAPSHOT_URL--asを指定した場合)でアクセス可能なDBが作成されます。 some-other-app-to-own-forked-databaseという名前の別のアプリ。

1
Bo Jeanes

看守は、この状況で役立ちます。私はあなたのものと同じものに取り組んでいます(各テーブルの最大100レコードを取得しようとしています)、ここで私が実行した手順を示します。-ルートエンティティ(ほとんどのテーブルに関連付けられているもの)を見つけて、レコードのサブセットを取得します。ルート行(たとえば、ルートはピープルである場合、people.id = 1 ...に関連するすべてのレコードを検索します)-終了ステップ1の後で、別のテーブル(100レコードにしたいテーブル)から再度開始します。 )、上記の結果からそのサブセットを取得します。

1
tulh

ランダムな行のセットを取得するには、次のように [〜#〜] limit [〜#〜] を使用できます。

SELECT * FROM my_table LIMIT 100

これは最も簡単で、PostreSQLが遭遇した最初の100行を選択するだけです。最後に挿入された100または最初の100の可能性があります。本当にランダムなものが必要な場合は、これを見てください Stackoverflow answer

0