Re: Support for REINDEX CONCURRENTLY
Andres Freund <andres@2ndquadrant.com>
From: Andres Freund <andres@2ndquadrant.com>
To: Michael Paquier <michael.paquier@gmail.com>
Cc: "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2012-12-07T15:55:17Z
Lists: pgsql-hackers
On 2012-12-07 21:37:06 +0900, Michael Paquier wrote: > Hi all, > > Long time this thread has not been updated... > Please find attached the version 3 of the patch for support of REINDEX > CONCURRENTLY. > The code has been realigned with master up to commit da07a1e (6th December). > > Here are the things modified: > - Improve code to use index_set_state_flag introduced by Tom in commit > 3c84046 > - One transaction is used for each index swap (N transactions if N indexes > reindexed at the same time) > - Fixed a bug to drop the old indexes concurrently at the end of process > > The index swap is managed by switching the names of the new and old indexes > using RenameRelationInternal several times. This API takes an exclusive > lock on the relation that is renamed until the end of the transaction > managing the swap. This has been discussed in this thread and other > threads, but it is important to mention it for people who have not read the > patch. Won't working like this cause problems when dependencies towards that index exist? E.g. an index-based constraint? As you have an access exlusive lock you should be able to just switch the relfilenodes of both and concurrently drop the *_cci index with the old relfilenode afterwards, that would preserve the index states. Right now I think clearing checkxmin is all you would need to other than that. We know we don't need it in the concurrent context. Greetings, Andres Freund -- Andres Freund http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Background worker processes
- da07a1e85651 9.3.0 cited
-
Fix assorted bugs in CREATE/DROP INDEX CONCURRENTLY.
- 3c84046490be 9.3.0 cited
-
Work around unportable behavior of malloc(0) and realloc(NULL, 0).
- 09ac603c36d1 9.3.0 cited
-
Properly set relpersistence for fake relcache entries.
- beb850e1d873 9.3.0 cited