Re: Temporarily disable all table indices

From: Erik Jones <erik(at)myemma(dot)com>
To: dmitry(at)koterov(dot)ru
Cc: "Postgres General" <pgsql-general(at)postgresql(dot)org>
Subject: Re: Temporarily disable all table indices
Date: 2007-03-27 01:09:10
Message-ID: 39D9BB5F-C86A-4CE1-8492-A4AAE1C81CB6@myemma.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Mar 26, 2007, at 5:24 PM, Dmitry Koterov wrote:

> Hello.
>
> I need to perform a mass operation (UPDATE) on each table row. E.g.
> - modify one table column:
>
> UPDATE tbl SET tbl_text = MD5(tbl_id);
>
> The problem is that if this table contains a number of indices,
> such UPDATE is very very slow on large table.
>
> I have to drop all indices on the table, then run the update (very
> quick) and after that - re-create all indices back. It is much more
> speedy. Unfortunately the table structure may change in the future
> (e.g. - new indices are added), so I don't know exactly in this
> abstraction layer, what indices to drop and what - to re-create.
>
> Is any way (or ready piece of code) to save all existed indices,
> drop them all and then - re-create after a mass UPDATE?

No, but you can use the pg_indexes view (http://www.postgresql.org/
docs/8.2/interactive/view-pg-indexes.html) to dynamically determine
what indexes a table has.

erik jones <erik(at)myemma(dot)com>
software developer
615-296-0838
emma(r)

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2007-03-27 01:25:42 Re: Insert fail: could not open relation with OID 3221204992
Previous Message Yang 2007-03-27 00:19:25 Re: PG over NFS