Thread
-
Re: Bugs in CREATE/DROP INDEX CONCURRENTLY
Kevin Grittner <kgrittn@mail.com> — 2012-10-17T22:51:06Z
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
-
Re: Bugs in CREATE/DROP INDEX CONCURRENTLY
Tom Lane <tgl@sss.pgh.pa.us> — 2012-10-17T23:31:31Z
"Kevin Grittner" <kgrittn@mail.com> writes: > 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. The above statement of the requirement doesn't seem to match what you put in the comment: > + * All predicate locks on the index are about to be made invalid. Promote > + * them to relation locks on the heap. For correctness this must be done > + * after the index was last seen with indisready = true and before it is > + * seen with indisvalid = false. and the comment is rather vaguely worded too (last seen by what?). Please wordsmith that a bit more. regards, tom lane