Re: [SQL] Newbie dbadmin out of his league

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Tim Pizey <tim(at)paneris(dot)co(dot)uk>
Cc: pgsql-sql(at)postgresql(dot)org, bloomsbury_development(at)messageboards(dot)paneris(dot)org
Subject: Re: [SQL] Newbie dbadmin out of his league
Date: 1999-08-27 21:19:18
Message-ID: 7648.935788758@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Tim Pizey <tim(at)paneris(dot)co(dot)uk> writes:
> 2. How do I use COPY?

> Presumably I again have to take control of the key values,
> drop the index
> copy from tab delimited file containing hard ids
> create id sequence
> create index
> modify id definition

Yup, that's about what you need to do. You can leave the "DEFAULT"
clause where it is, since it won't be invoked during a COPY that's
supplying non-default values for the ID column. (A good thing too,
since I don't think we support ALTER TABLE ADD DEFAULT...)

Just create the sequence with the right starting value (one past last
ID being loaded). You can do that before or after the COPY, doesn't
matter.

A COPY will be way faster than a series of INSERT commands, especially
if each INSERT is invoking a nextval(). nextval() is great for
serializing live updates but it's pretty inefficient for a bulk-loading
situation. Creating the index after the load is reputed to be faster
than building it incrementally, as well.

BTW, I believe pg_dump gets this right, so you could look at the script
generated by pg_dump of a small sample table for details.

regards, tom lane

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Michael Richards 1999-08-27 21:39:44 RE: [SQL] 2 million+ entries
Previous Message Tim Pizey 1999-08-27 20:12:32 Newbie dbadmin out of his league