Re: Bulk loading/merging

From: "Ahmad Fajar" <ahmadfajar(at)i2(dot)co(dot)id>
To: "'Michael Artz'" <mlartz(at)gmail(dot)com>
Cc: <pgsql-performance(at)postgresql(dot)org>
Subject: Re: Bulk loading/merging
Date: 2006-06-04 12:00:32
Message-ID: 003601c687ce$7aee7b20$7f00a8c0@kicommunication.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

On 06/02/2006, Michael Artz wrote:

hmm, I don't quite understand what you are saying and I think my basic
misunderstanding is how to use the UPDATE ... WHERE EXISTS to merge data in
bulk. Assuming that I bulk COPYed the data into a temporary table, I'd need
to issue an UPDATE for each row in the newly created table, right?

For example, for a slightly different key,count schema:

CREATE TABLE kc (key integer, count integer);

and wanting to merge the following data by just updating the count for a
given key to the equivalent of OLD.count + NEW.count:

1,10

2,15

3,45

1,30

How would I go about using UPDATE ... WHERE EXISTS to update the "master" kc
table from a (temporary) table loaded with the above data?

May be, this method could help you:

CREATE TEMP TABLE clip_temp (

cids int8 NOT NULL,

clip_id int8 NOT NULL,

mentions int4 DEFAULT 0,

CONSTRAINT pk_clip_temp PRIMARY KEY (cids, clip_id))

)

insert data into this temporary table...

then do:

UPDATE clip_category SET mentions=clip_temp.mentions

FROM clip_temp

WHERE clip_category.cids=clip_temp.cids

AND clip_category.clip_id=clip_temp.clip_id

DELETE FROM clip_temp USING clip_category

WHERE clip_temp.cids=clip_category.cids

AND clip_temp.clip_id=clip_category.clip_id

INSERT INTO clip_category (cids, clip_id, mentions)

SELECT * FROM clip_temp

DROP TABLE clip_temp;

Best regards,

ahmad fajar,

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Zoltan Boszormenyi 2006-06-04 22:01:24 psql -A (unaligned format) eats too much memory
Previous Message A. Kretschmer 2006-06-04 07:40:14 Re: INSERT OR UPDATE WITHOUT SELECT