Re: REINDEX CONCURRENTLY 2.0

Michael Paquier <michael.paquier@gmail.com>

From: Michael Paquier <michael.paquier@gmail.com>
To: Jim Nasby <jim@nasby.net>
Cc: PostgreSQL mailing lists <pgsql-hackers@postgresql.org>
Date: 2014-01-21T13:12:25Z
Lists: pgsql-hackers

Attachments

Hi,

Thanks for your comments.

On Fri, Jan 10, 2014 at 9:59 AM, Jim Nasby <jim@nasby.net> wrote:
> Sorry for the lateness of this...
>
> On 11/14/13, 8:40 PM, Michael Paquier wrote:
>>
>> +       /*
>> +        * Phase 4 of REINDEX CONCURRENTLY
>> +        *
>> +        * Now that the concurrent indexes have been validated could be
>> used,
>> +        * we need to swap each concurrent index with its corresponding
>> old index.
>> +        * Note that the concurrent index used for swaping is not marked
>> as valid
>> +        * because we need to keep the former index and the concurrent
>> index with
>> +        * a different valid status to avoid an implosion in the number of
>> indexes
>> +        * a parent relation could have if this operation fails multiple
>> times in
>> +        * a row due to a reason or another. Note that we already know
>> thanks to
>> +        * validation step that
>> +        */
>> +
>
>
> Was there supposed to be more to that comment?
Not really, it seems that this chunk came out after writing multiple
successive versions of this patch.

> In the loop right below it...
>
> +       /* Swap the indexes and mark the indexes that have the old data as
> invalid */
> +       forboth(lc, indexIds, lc2, concurrentIndexIds)
> ...
> +               CacheInvalidateRelcacheByRelid(relOid);
>
> Do we actually need to invalidate the cache on each case? Is it because
> we're grabbing a new transaction each time through?
This is to force a refresh of the cached plans that have been using
the old index before transaction of step 4 began.

I have realigned this patch with latest head (d2458e3)... In case
someone is interested at some point...

Regards,
-- 
Michael

Commits

  1. Prevent reindex of invalid indexes on TOAST tables

  2. Rework handling of invalid indexes with REINDEX CONCURRENTLY

  3. Split builtins.h to a new header ruleutils.h