From: | Simon Riggs <simon(at)2ndQuadrant(dot)com> |
---|---|
To: | Csaba Nagy <ncslists(at)googlemail(dot)com> |
Cc: | Robert Haas <robertmhaas(at)gmail(dot)com>, Josh Berkus <josh(at)agliodbs(dot)com>, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: ALTER TABLE ... REPLACE WITH |
Date: | 2010-12-15 10:39:56 |
Message-ID: | 1292409596.2737.5939.camel@ebony |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Wed, 2010-12-15 at 10:54 +0100, Csaba Nagy wrote:
> On Tue, 2010-12-14 at 14:36 -0500, Robert Haas wrote:
> > > Well, you have to do that for DROP TABLE as well, and I don't see any
> > > way around doing it for REPLACE WITH.
> >
> > Sure, but in Simon's proposal you can load the data FIRST and then
> > take a lock just long enough to do the swap. That's very different
> > from needing to hold the lock during the whole data load.
>
> Except Simon's original proposal has this line in it:
>
> * "new_table" is TRUNCATEd.
>
> I guess Simon mixed up "new_table" and "old_table", and the one which
> should get truncated is the replaced one and not the replacement,
> otherwise it doesn't make sense to me.
What I meant was...
REPLACE TABLE target WITH source;
* target's old rows are discarded
* target's new rows are all of the rows from "source".
* source is then truncated, so ends up empty
Perhaps a more useful definition would be
EXCHANGE TABLE target WITH source;
which just swaps the heap and indexes of each table.
You can then use TRUNCATE if you want to actually destroy data.
I will go with that unless we have other objections.
> BTW, I would have also used such a feature on multiple occasions in the
> past and expect I would do in the future too.
>
> Cheers,
> Csaba.
>
>
--
Simon Riggs http://www.2ndQuadrant.com/books/
PostgreSQL Development, 24x7 Support, Training and Services
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Geoghegan | 2010-12-15 11:07:45 | Re: Segfault related to pg_authid when running initdb from git master |
Previous Message | Csaba Nagy | 2010-12-15 09:54:33 | Re: ALTER TABLE ... REPLACE WITH |