[pgsql-jp: 37714] Re: INDEX を残したまま大量データを高速に挿入したい

河本陽一 komoto.yoichi @ kcc.co.jp
2006年 11月 22日 (水) 18:31:17 JST


こうもとです。

a.mitani さんの書いたこと:
> まず,勝手に想定していたことなのですが,
> 入力データの対象レコードが存在するかどうかをDBに問い合わせて判断し,
> なければINSERT文,あればUPDATE文を作っているのだろうと思っていました.

 そのとおりです。


> ここでINSERT文の代わりにCOPY文のデータにしてやれば,COPYでデータ投入が可能に
> なります.

 COPYのためのデータをどうやって作るのかが思いつきません。

 以下の条件での処理を考えます。

●テーブル
t1 (
    tdata text,
    tcnt  int
);

●データ
aaaaa
bbbbb
ccccc
ccccc
aaaaa
ccccc

 結果的に、以下の常態になることを望んでいます。

tdata  | tcnt
-------+------
aaaaa  |    2
bbbbb  |    1
ccccc  |    3

 データを順次読み込みますが、読み込んだデータが既存ならUPDATE用、な
ければCOPY用となると思います。
 その判断のためには、やはりDBに入れながらやるしかないかと思っていま
す。

 三谷さんの言いたいことが理解できていないだけのような気がしますが、
なにか上記のことが解決できるうまい方法があるのでしょうか。

 ちなみに、UPDATEの対象となるレコードは、同じトランザクション内のデー
タに対してのみです。
 キーに日付を含んでいるため、トランザクション以外のデータをUPDATEす
ることはありません。


======================================================================
河本陽一(こうもとよういち)
mailto:komoto.yoichi @ kcc.co.jp




pgsql-jp メーリングリストの案内