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])