Postgres:あるスキーマから別のスキーマに大量のデータ(10k +行)をすぐに使用するためにコピーする

postgresql sqlbulkcopy

質問

私は必要に応じて、あるPostgresスキーマから別のPostgresスキーマへ行をプッシュする必要があります。 1つのスキーマはコンテンツを格納し、もう1つはエンドユーザーがカスタム使用のために追加、変更、削除するデータのサブセットのコピーです。コンテンツが追加され、より多くのコンテンツがエンドユーザーによって吸収され、カスタマイズされるにつれて、各スキーマテーブルには10万以上のレコードがあります。データ移動は、複数のテーブルから他のスキーマの複数のテーブルに数千レコードになります。これらのスキーマは同じデータベースにあります。このデータは常に移動するため、コンテンツを選択した直後にエンドユーザーがカスタマイズを開始できるように、非常に高速にする必要があります。私はCOPY機能とレプリケーションのトリガーを見てきましたが、必要なだけ速く実行することはできません。挿入前にインデックスを削除することはできません。これらのテーブルは消費者が絶え間なく頻繁に使用するためです。アドバイスをいただければ幸いです。

受け入れられた回答

データベースのあるスキーマのテーブルの束から同じデータベースの別のスキーマにコピーしているので、最速の方法がINSERT INTO ... SELECT FROMを使用して実行されるまで開始できません両方のスキーマにアクセスできるユーザー(例:

INSERT INTO schema2.table_y ( field, field, field )
SELECT field, field, field
FROM schema1.table_y
WHERE user filter condition

複数のテーブルでこれを行う必要があるため、1つの大きなトランザクションでラップするか、1つの大きなクエリで書き込み可能なCTEを使用して複数のinsert文を実行することができます。

それは本当にデータのコピーを得る最速の方法になるでしょう。しかし、まだゼロ以外の時間がかかります。データを抽出する両方のSELECTクエリには、複数のテーブルに数千の行が挿入されるため、時間がかかります。この時間を短縮する方法は、一般的なクエリとパフォーマンスの最適化です。

ユーザーがデータのコピーを必要とせず、データのライブサブセットのみを必要とする操作の場合は、更新可能なVIEWを含むVIEWを使用して探索できます。しかし、コピーが必要なように聞こえます。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ