0

私はpostgresqlデータベースのプロファイリングを任されています。最初の要件は、理論上の制限を見つけるために、考えられるすべての外部ボトルネックを取り除いて、レコードを追加できる速度を確認することです。

まず、サンプルデータを使ってcsvファイルを作成し、COPY機能で読み込みました。これで、すべてのレコードが関数を介して追加されますupdate_or_add()。COPYを一緒に使用することは可能update_or_add()ですか、それとも私が検討していないより良い解決策がありますか?

4

1 に答える 1

1

「行ごとに行のupdate_or_add()を呼び出す」のではなく、「update_or_add」を一般化してセット内のすべての行で機能するようにすることをお勧めします。

COPY外部ソースからTEMPORARYまたはUNLOGGEDテーブルへのデータ。次に、コピーしたテーブルのデータをメインテーブルにマージするクエリを作成しますupdate_or_add()。ただし、すべての行を一度にマージします。メインテーブルの同時変更が可能な場合は、メインテーブルをロックして、マージの実行中にLOCK TABLE main_table IN EXCLUSIVE MODE他のトランザクションがメインテーブルからのみ実行できるようにする必要があります。SELECT

スキーマがなければ、または何を知っているかを知らなければ、update_or_addこれ以上言うのは難しいです。推測では、これはアップサート/マージ関数です。この場合、メインテーブルをロックし、セット全体のマージを実行することで、その作業を大幅に効率的に行うことができます。

于 2012-10-23T22:24:35.827 に答える