Re: update from a csv file? - Mailing list pgsql-general

From François Beausoleil
Subject Re: update from a csv file?
Date
Msg-id 524AB114-9C21-4793-BEC4-40C767E6D616@teksol.info
Whole thread Raw
In response to update from a csv file?  (Kirk Wythers <wythe001@umn.edu>)
Responses Re: update from a csv file?
List pgsql-general
Le 2012-12-27 à 09:54, Kirk Wythers a écrit :

> I have been using COPY FROM to do a mass import of records from CSV files into a new database. I have discover
however,a small number of records ( a few thousand) in one of the files that contain new data that needs to be added to
thedatabase, but on rows that have a primary key and have already been inserted (so I can't use COPY FROM because it
violatesthe primary key).  
>
> If the structure of the table is
>
> id    data1    data2    data3
>
> and the structure of the CSV file is
>
> id    data1    data2    data3
>
> and I need to update all the rows in data3 where the id = id.
>
> Is this a job for the UPDATE command? or is there a better way to pull data from a CSV file in order to do a mass
update?

You will want to COPY FROM on a new table that has the same structure:

BEGIN;
CREATE TEMPORARY TABLE original_table_name_temp( LIKE original_table_name INCLUDING ALL );
COPY original_table_name_temp FROM stdin;
-- If there are many thousands of rows
ANALYZE original_table_name_temp;
UPDATE original_table_name o
  SET data3 = t.data3
  FROM original_table_name_temp t
  WHERE o.id = t.id;
COMMIT;

http://www.postgresql.org/docs/current/static/sql-update.html

You may also want to investigate the ON COMMIT option for CREATE TABLE:
http://www.postgresql.org/docs/current/static/sql-createtable.html

Good luck!
François

pgsql-general by date:

Previous
From: Craig Ringer
Date:
Subject: Re: update table from csv file
Next
From: wd
Date:
Subject: Group by bug?