web-dev-qa-db-ja.com

Postgres COPY、複数のファイルを同じテーブルにロードすることは可能ですか?

同じテーブルに対していくつかの\copyコマンドを並行して実行することは可能ですか? pg_restoreにも同様のものが存在することは知っていますが、それによって作業がテーブル間で分割されます。

40〜1億行の範囲のファイルで作業しています。インデックスを削除して後で作成するにもかかわらず、それでもかなりの時間がかかります。

2
sean

ここで2つの質問があります。

  1. 複数のファイルを同じテーブルにロードすることは可能ですか?
  2. その利点に関しては、「同じテーブルに対して並行して」時間に関する懸念があり、「インデックスを削除して後で作成するにもかかわらず、それでもかなりの時間がかかります。」

はい、複数のファイルをロードできます。機能的には、COPYコマンドを何回実行してもかまいません。複数回実行できます。

通常、ターゲットが同じテーブルの場合、または同じテーブルスペース上にある場合でも、copyコマンドを分割してもあまりメリットはありません。 1つのバックグラウンドライタープロセスでディスクを簡単に飽和させることができます。これが問題になるのは、計算量の多いものがある場合だけです。さらに、コピーを分割しない理由はいくつかあります。たとえば、 同じトランザクションでテーブルを作成してロードする場合 WALが少なくなります。

COPYは、以前のトランザクションと同じトランザクション内で使用した場合に最速ですCREATE TABLEまたはTRUNCATEコマンド。このような場合、WALを書き込む必要はありません。エラーが発生した場合、新しくロードされたデータを含むファイルはとにかく削除されます。ただし、この考慮事項は、すべてのコマンドがWALを書き込まなければならないため、wal_levelが最小の場合にのみ適用されます。

より高速な書き込みが必要な場合は、 Non-Durable Settings を確認してください

1
Evan Carroll