Re: Using COPY for bulk upload in a table with sequence field

Lists: pgsql-admin
From: Gautam Saha <gsaha(at)imsa(dot)edu>
To: pgsql-admin(at)postgresql(dot)org
Subject: Using COPY for bulk upload in a table with sequence field
Date: 2005-01-18 23:43:51
Message-ID: 41ED9F37.6020403@imsa.edu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-admin

Hi:

Can I use COPY command to upload a flat text file into a PG table where
the PK column (item_id) is Serial type.
The table is an existing table with data and I want to
insert new rows from the flat file. The sequence already defined for
this column.

If I do not have the item_id data in my flat file, is it going to get the
id from nextval from the sequence?

Any help is appreciated.

Gautam


From: Michael Fuhr <mike(at)fuhr(dot)org>
To: Gautam Saha <gsaha(at)imsa(dot)edu>
Cc: pgsql-admin(at)postgresql(dot)org
Subject: Re: Using COPY for bulk upload in a table with sequence field
Date: 2005-01-19 01:59:37
Message-ID: 20050119015937.GA55639@winnie.fuhr.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-admin

On Tue, Jan 18, 2005 at 05:43:51PM -0600, Gautam Saha wrote:

> Can I use COPY command to upload a flat text file into a PG table where
> the PK column (item_id) is Serial type.

What does the documentation say? What happened when you tried it?

It can be educational to practice on test data so mistakes don't
matter. And when changing "real" data, consider using a transaction
so you can verify that the changes are correct: issue a BEGIN
statement, then make the changes, then issue enough SELECT statements
to satisfy you that the changes are correct, then issue a COMMIT.
If the changes don't look right then do a ROLLBACK.

Here's an excerpt from the COPY page in the Reference part of the
documentation:

If a list of columns is specified, COPY will only copy the data in
the specified columns to or from the file. If there are any columns
in the table that are not in the column list, COPY FROM will insert
the default values for those columns.

Here's an experiment:

CREATE TABLE foo (id serial PRIMARY KEY, name text);
INSERT INTO foo (name) values ('John');
INSERT INTO foo (name) values ('David');

SELECT * FROM foo ORDER BY id;
id | name
----+-------
1 | John
2 | David
(2 rows)

COPY foo (name) FROM stdin;
James
Robert
\.

SELECT * FROM foo ORDER BY id;
id | name
----+--------
1 | John
2 | David
3 | James
4 | Robert
(4 rows)

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/