Re: update from a csv file?

From: François Beausoleil <francois(at)teksol(dot)info>
To: Kirk Wythers <wythe001(at)umn(dot)edu>
Cc: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: update from a csv file?
Date: 2012-12-28 05:47:35
Message-ID: 524AB114-9C21-4793-BEC4-40C767E6D616@teksol.info
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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 the database, but on rows that have a primary key and have already been inserted (so I can't use COPY FROM because it violates the 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

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message nevillekb 2012-12-28 06:52:36 Tool to create database diagrams in postgreSQL
Previous Message Harry 2012-12-28 05:28:50 Re: Cursor fetch Problem.