Re: transactional swap of tables

From: Kevin Grittner <kgrittn(at)ymail(dot)com>
To: Vincenzo Romano <vincenzo(dot)romano(at)notorand(dot)it>, PostgreSQL General <pgsql-general(at)postgresql(dot)org>
Subject: Re: transactional swap of tables
Date: 2013-07-12 14:24:49
Message-ID: 1373639089.44097.YahooMailNeo@web162905.mail.bf1.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Vincenzo Romano <vincenzo(dot)romano(at)notorand(dot)it> wrote:

> I'd like to "replace" a full table F with an empty one E.
> In order to do this I see only one way:
>
> ALTER TABLE F RENAME TO T;
> ALTER TABLE E RENAME TO F;
> ALTER TABLE T RENAME TO E; -- optional
>
> This implies there's a moment when the full table doesn't exist.
> Would a transaction enclosure ensure that the table F will be
> always available to all clients?

Yes.  What you show is safe.  What has a race condition is dropping
the old table before all transactions which started with it have
completed.  If you're going to drop the old table, be sure to wait
long enough after the COMMIT for things to "settle".

--
Kevin Grittner
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

In response to

  • at 2013-07-12 11:23:40 from Vincenzo Romano

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Joshua D. Drake 2013-07-12 14:46:47 Re: Distributed systems and primary keys
Previous Message Melvin Call 2013-07-12 14:23:32 Distributed systems and primary keys