Re: [SQL] Newbie dbadmin out of his league - Mailing list pgsql-sql

From Tim Pizey
Subject Re: [SQL] Newbie dbadmin out of his league
Date
Msg-id 3.0.3.32.19990902113617.00732f1c@popmail.dircon.co.uk
Whole thread Raw
In response to Re: [SQL] Newbie dbadmin out of his league  (Herouth Maoz <herouth@oumail.openu.ac.il>)
List pgsql-sql
At 18:45 01/09/99 +0300, Herouth Maoz wrote:
>At 00:19 +0300 on 28/08/1999, Tom Lane wrote:
>
>
>> >    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...)
>
>Hmmm. If it were I, I would have tackled it in a slightly different way:
>
>COPY the data into a temporary table, that doesn't have the id numbers at
>all. Thus you don't have to have a counter on the client side, that knows
>the last id that's already on the table, etc, etc., and you also don't have
>to transfer several extra bytes per row through the postgres port.
>
Does the volume of data really matter, I was assuming that it was the
indexing that was taking the time. Many of my field sizes are generous and
padded with spaces. 

>Then, when you have a temp table, you can add the values to the main table
>with an
>
>INSERT INTO main_table (field1, field2, field3)
>SELECT field1, field2, field3
>FROM temp_table;
>
>If you don't mention the field that carries the default in this INSERT
>statement, it will invoke the default. Dropping the index may still be a
>good idea. The temp table shouldn't have an index anyways.
>
>This would save you at least the three last steps in your "recipe".
>
Thanks a lot for this, I will try it next. 

At the moment the job is going much faster, but is getting stuck on the
index creation.

I am turning off fsync (-o -F) during the copy, which copies all 2000000 
records in one COPY. Should I keep it off during the index creation?

It looks increasingly as though this process is going to take an un
acceptable amount of time and resources on a live server. 

What is the recommended way of creating a db on another machine and then 
hot swapping the live and the new dbs?

yours
Tim Pizey
Happy to take part:/
/www.paneris.co.uk/



pgsql-sql by date:

Previous
From: Tim Pizey
Date:
Subject: Re: [SQL] Newbie dbadmin out of his league
Next
From: José Soares
Date:
Subject: Re: [GENERAL] Max function on Timestamp