Re: Bugs in CREATE/DROP INDEX CONCURRENTLY

Kevin Grittner <kgrittn@mail.com>

From: "Kevin Grittner" <kgrittn@mail.com>
To: "Kevin Grittner" <kgrittn@mail.com>,"Simon Riggs" <simon@2ndQuadrant.com>,"Tom Lane" <tgl@sss.pgh.pa.us>
Cc: pgsql-hackers@postgresql.org
Date: 2012-10-17T22:51:06Z
Lists: pgsql-hackers

Attachments

Kevin Grittner wrote:
> Simon Riggs wrote:
>> On 6 October 2012 00:56, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>  
>>> 2. DROP INDEX CONCURRENTLY doesn't bother to do
>>> TransferPredicateLocksToHeapRelation until long after it's
>>> invalidated the index. Surely that's no good? Is it even possible
>>> to do that correctly, when we don't have a lock that will prevent
>>> new predicate locks from being taken out meanwhile?
>> 
>> No idea there. Input appreciated.
 
> If the creation of a new tuple by insert or update would not
> perform the related index tuple insertion, and the lock has not yet
> been transfered to the heap relation, yes we have a problem.  Will
> take a look at the code.
> 
> Creation of new predicate locks while in this state has no bearing
> on the issue as long as locks are transferred to the heap relation
> after the last scan using the index has completed.
 
To put that another way, it should be done at a time when it is sure
that no query sees indisvalid = true and no query has yet seen
indisready = false.  Patch attached.  Will apply if nobody sees a
problem with it.

-Kevin