On Wed, Nov 28, 2012 at 9:48 PM, Claudio Freire <klaussfre...@gmail.com>wrote:

> On Wed, Nov 28, 2012 at 8:28 PM, Jeff Davis <pg...@j-davis.com> wrote:
> >
> > The main problem with a long-running delete or update transaction is
> > that the dead tuples (deleted tuples or the old version of an updated
> > tuple) can't be removed until the transaction finishes. That can cause
> > temporary "bloat", but 1.5M records shouldn't be noticeable.
>
> Not really that fast if you have indices (and who doesn't have a PK or
> two).
>
> I've never been able to update (update) 2M rows in one transaction in
> reasonable times (read: less than several hours) without dropping
> indices. Doing it in batches is way faster if you can't drop the
> indices, and if you can leverage HOT updates.


What I'm trying at this point is:

BEGIN;
DROP INDEX -- only one unique index exists
DELETE FROM table;
COPY table FROM STDIN;
COMMIT;
CREATE INDEX CONCURRENTLY;

Do I understand correctly that DROP/CREATE index are not transactional, and
thus the index will disappear immediately for other transactions?  Am I
better off in that case moving the DROP INDEX outside the transaction?

The access pattern for the table is such that I can afford the occasional
stray hit without an index during the reload time.  It's been pretty quick
using the above.

Mike

Reply via email to