比較的大きな量のpostgresベースのデータベースがあります:〜20GB。PostgreSQLデータベースはherokuでホストされています。
テーブルデータの小さなサブセットをローカルデータベースにコピーして、本番環境で作業することなく、それらに対していくつかのテストを実行したいと考えています。
自分でサンプルデータを生成するのではなく、本番環境にすでに存在するデータを使用します。
データベースの各テーブルから最大100行で十分です。これを達成する簡単な方法はありますか?
比較的大きな量の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
、on でアクセス可能なDBがある場合、という名前の別のアプリでPRODUCTION_SNAPSHOT_URL
(指定した場合--as
)でアクセス可能なDB が作成されますsome-other-app-to-own-forked-database
。
ランダムな行のセットを取得するには、次のようにLIMITを使用できます。
SELECT * FROM my_table LIMIT 100
これが最も簡単で、PostreSQLが遭遇した最初の100行を選択するだけです。最後に挿入された100または最初の100の可能性があります。本当にランダムなものが必要な場合は、このStackoverflowの回答をご覧ください。
LIMIT
を使用しても、FK参照は処理されません。たとえば、ordersテーブルの100行には、customersテーブルから100行をエクスポートするときに存在しない顧客が含まれる場合があります。