Simon Riggs wrote:
> On Wed, 2005-06-01 at 04:44 -0400, Greg Stark wrote:
> > Greg Stark <[EMAIL PROTECTED]> writes:
> > 
> > > For CREATE TABLE AS in the non-PITR case you don't really need to WAL log 
> > > the
> > > records at all. If it fails in the middle you just drop the table. When it
> > > completes you do a checkpoint before acknowledging the COMMIT.
> > > 
> > > I think this is already done for CREATE INDEX/REINDEX, also only in the
> > > non-PITR case.
> > 
> > Sorry to followup to my own message, but it occurs to me that COPY could be
> > made to automatically do this for the case of an empty destination table 
> > too.
> > 
> > I'm not sure if it should automatically check for an empty table or if there
> > should be an option for the user to indicate he wants COPY to replace the
> > current contents entirely. The latter might actually be more useful. .
> > 
> > But either way, you just WAL log a record indicating that the table should 
> > be
> > entirely empty. Then you fill it up without logging anything. Do a 
> > checkpoint
> > and then WAL log that the COPY is finished. If any failure occurs replay
> > leaves it empty.
> > 
> > Again this sadly only works in the non-PITR case.
> 
> Yes, all of the above could work.
> 
> It would use essentially the same functionality that Manfred suggested
> for handling truncated tables. Ignore the first LOAD DATA started
> message until recovery completes, then truncate table if the LOAD DATA
> complete message was not logged in wal.

Well, why not just add this functionality to COPY rather than create a
new command?  One optimization is to write the dirty shared buffers to
the kernel then fsync that relation, rather than do a checkpoint.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to