質問: 私は必要に応じて、ある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を使用して探索できます。しかし、コピーが必要なように聞こえます。