比較的大きな量のpostgresベースのデータベースがあります:〜20GB。 PostgreSQLデータベースはherokuでホストされています。
テーブルデータの小さなサブセットをローカルデータベースにコピーして、本番環境で作業することなく、それらに対していくつかのテストを実行したいと考えています。
自分でサンプルデータを生成するのではなく、本番環境にすでに存在するデータを使用します。
データベース内の各テーブルから最大100行で十分です。これを達成する簡単な方法はありますか?
私はこのツールを使用していませんが、Jailerはそれを行うと約束しています
データベースのサブセット化および参照ツール。リレーショナルデータベース(JDBC)から一貫性のある、参照用に損なわれていない行セットをエクスポートする
別のオプションは、私が最近遭遇したものです(当然、私はまだ使用していませんが、すぐに使用する予定です): rdbms-subsetter
。
Jailerよりも少しシンプルで軽量で、いくつかの素晴らしい機能/特典があります。
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_URL
でyour-production-app
を使用してアクセス可能なDBがある場合、PRODUCTION_SNAPSHOT_URL
(--as
を指定した場合)でアクセス可能なDBが作成されます。 some-other-app-to-own-forked-database
という名前の別のアプリ。
看守は、この状況で役立ちます。私はあなたのものと同じものに取り組んでいます(各テーブルの最大100レコードを取得しようとしています)、ここで私が実行した手順を示します。-ルートエンティティ(ほとんどのテーブルに関連付けられているもの)を見つけて、レコードのサブセットを取得します。ルート行(たとえば、ルートはピープルである場合、people.id = 1 ...に関連するすべてのレコードを検索します)-終了ステップ1の後で、別のテーブル(100レコードにしたいテーブル)から再度開始します。 )、上記の結果からそのサブセットを取得します。
ランダムな行のセットを取得するには、次のように [〜#〜] limit [〜#〜] を使用できます。
SELECT * FROM my_table LIMIT 100
これは最も簡単で、PostreSQLが遭遇した最初の100行を選択するだけです。最後に挿入された100または最初の100の可能性があります。本当にランダムなものが必要な場合は、これを見てください Stackoverflow answer 。