From: Tom Lane Date: Wed, 28 Jul 2010 17:21:56 +0000 (+0000) Subject: Fix oversight in new EvalPlanQual logic: the second loop over the ExecRowMark X-Git-Tag: REL9_1_ALPHA1~168 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=77c75076f3f49ef19b5e59eae531f1836613ed56;p=postgresql Fix oversight in new EvalPlanQual logic: the second loop over the ExecRowMark list in ExecLockRows() forgot to allow for the possibility that some of the rowmarks are for child tables that aren't relevant to the current row. Per report from Kenichiro Tanaka. --- diff --git a/src/backend/executor/nodeLockRows.c b/src/backend/executor/nodeLockRows.c index d573853eba..a84b64b095 100644 --- a/src/backend/executor/nodeLockRows.c +++ b/src/backend/executor/nodeLockRows.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/executor/nodeLockRows.c,v 1.5 2010/07/12 17:01:05 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/executor/nodeLockRows.c,v 1.6 2010/07/28 17:21:56 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -195,6 +195,13 @@ lnext: HeapTupleData tuple; Buffer buffer; + /* ignore non-active child tables */ + if (!ItemPointerIsValid(&(erm->curCtid))) + { + Assert(erm->rti != erm->prti); /* check it's child table */ + continue; + } + if (EvalPlanQualGetTuple(&node->lr_epqstate, erm->rti) != NULL) continue; /* it was updated and fetched above */