From 77c75076f3f49ef19b5e59eae531f1836613ed56 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Wed, 28 Jul 2010 17:21:56 +0000
Subject: [PATCH] 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.

---
 src/backend/executor/nodeLockRows.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/backend/executor/nodeLockRows.c b/src/backend/executor/nodeLockRows.c
index d573853eba9..a84b64b0952 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 */
 
-- 
GitLab