> 12 марта 2018 г., в 1:54, Alexander Korotkov <a.korot...@postgrespro.ru> > написал(а): > > On Wed, Mar 7, 2018 at 8:30 PM, Alvaro Herrera <alvhe...@2ndquadrant.com> > wrote: > I suggest to create a new function GinPredicateLockPage() that checks > whether fast update is enabled for the index. The current arrangement > looks too repetitive and it seems easy to make a mistake. > > BTW, should we also skip CheckForSerializableConflictIn() when > fast update is enabled? AFAICS, now it doesn't cause any errors or > false positives, but makes useless load. Is it correct? > BTW to BTW. I think we should check pending list size with GinGetPendingListCleanupSize() here + + /* + * If fast update is enabled, we acquire a predicate lock on the entire + * relation as fast update postpones the insertion of tuples into index + * structure due to which we can't detect rw conflicts. + */ + if (GinGetUseFastUpdate(ginstate->index)) + PredicateLockRelation(ginstate->index, snapshot);
Because we can alter alter index set (fastupdate = off), but there still will be pending list. We were discussing this with Shubham back in July, chosen some approach that seemed better, but I can't remember what was that... Best regards, Andrey Borodin.