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.
There are still two things that are missing in this patch, but I would like to have more feedback before moving forward:
- REINDEX CONCURRENTLY needs tests in src/test/isolation
- There is still a problem with toast indexes. If the concurrent reindex of a toast index fails for a reason or another, pg_relation will finish with invalid toast index entries. I am still wondering about how to clean up that. Any ideas?
Comments?
--
Michael Paquier
http://michael.otacoo.com