diff --git a/src/backend/executor/nodeMaterial.c b/src/backend/executor/nodeMaterial.c
index ecf33f4c201ba9eccf3ee8d864870f3b5d988aa5..4348f89ccc9746b4a8c0b845fa3c31d001c1fc8e 100644
--- a/src/backend/executor/nodeMaterial.c
+++ b/src/backend/executor/nodeMaterial.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v 1.29 2000/01/26 05:56:23 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v 1.30 2000/03/02 04:06:39 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -86,7 +86,7 @@ ExecMaterial(Material *node)
 		estate->es_direction = ForwardScanDirection;
 
 		/* ----------------
-		 *	 if we couldn't create the temp or current relations then
+		 *	 if we couldn't create the temp relation then
 		 *	 we print a warning and return NULL.
 		 * ----------------
 		 */
@@ -97,13 +97,6 @@ ExecMaterial(Material *node)
 			return NULL;
 		}
 
-		currentRelation = matstate->csstate.css_currentRelation;
-		if (currentRelation == NULL)
-		{
-			elog(DEBUG, "ExecMaterial: current relation is NULL! aborting...");
-			return NULL;
-		}
-
 		/* ----------------
 		 *	 retrieve tuples from the subplan and
 		 *	 insert them in the temporary relation
@@ -121,7 +114,6 @@ ExecMaterial(Material *node)
 
 			ExecClearTuple(slot);
 		}
-		currentRelation = tempRelation;
 
 		/* ----------------
 		 *	 restore to user specified direction
@@ -134,6 +126,7 @@ ExecMaterial(Material *node)
 		 *	 sorted relation and update the sortstate information
 		 * ----------------
 		 */
+		currentRelation = tempRelation;
 		currentScanDesc = heap_beginscan(currentRelation,		/* relation */
 										 ScanDirectionIsBackward(dir),
 										 SnapshotSelf,	/* seeself */
@@ -265,7 +258,6 @@ ExecInitMaterial(Material *node, EState *estate, Plan *parent)
 	 *	create the temporary relation
 	 * ----------------
 	 */
-/*	  len = ExecTargetListLength(node->plan.targetlist); */
 	tempDesc = ExecCreatR(tupType, _NONAME_RELATION_ID_);
 
 	/* ----------------
@@ -273,7 +265,7 @@ ExecInitMaterial(Material *node, EState *estate, Plan *parent)
 	 * ----------------
 	 */
 	matstate->mat_TempRelation = tempDesc;
-	matstate->csstate.css_currentRelation = tempDesc;
+	matstate->csstate.css_currentRelation = NULL;
 
 	/* ----------------
 	 *	return relation oid of temporary relation in a list
@@ -312,12 +304,11 @@ ExecEndMaterial(Material *node)
 	matstate = node->matstate;
 	tempRelation = matstate->mat_TempRelation;
 
-	heap_drop(tempRelation);
-
 	/* ----------------
-	 *	close the temp relation and shut down the scan.
+	 *	shut down the scan, but don't close the temp relation
 	 * ----------------
 	 */
+	matstate->csstate.css_currentRelation = NULL;
 	ExecCloseR((Plan *) node);
 
 	/* ----------------
@@ -332,6 +323,13 @@ ExecEndMaterial(Material *node)
 	 * ----------------
 	 */
 	ExecClearTuple(matstate->csstate.css_ScanTupleSlot);
+
+	/* ----------------
+	 *	delete the temp relation
+	 * ----------------
+	 */
+	if (tempRelation != NULL)
+		heap_drop(tempRelation);
 }
 
 /* ----------------------------------------------------------------