diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c
index d470990e942773f89ee8f5cb9e5b0d6ff337b601..08480631fec5062434bf8edd36d53a7b3a03e6b5 100644
--- a/src/backend/commands/explain.c
+++ b/src/backend/commands/explain.c
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994-5, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.138 2005/10/15 02:49:15 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/commands/explain.c,v 1.139 2005/10/21 16:43:33 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -196,6 +196,15 @@ ExplainOneQuery(Query *query, ExplainStmt *stmt, TupOutputState *tstate)
 	/* plan the query */
 	plan = planner(query, isCursor, cursorOptions, NULL);
 
+	/*
+	 * Update snapshot command ID to ensure this query sees results of any
+	 * previously executed queries.  (It's a bit cheesy to modify
+	 * ActiveSnapshot without making a copy, but for the limited ways in
+	 * which EXPLAIN can be invoked, I think it's OK, because the active
+	 * snapshot shouldn't be shared with anything else anyway.)
+	 */
+	ActiveSnapshot->curcid = GetCurrentCommandId();
+
 	/* Create a QueryDesc requesting no output */
 	queryDesc = CreateQueryDesc(query, plan,
 								ActiveSnapshot, InvalidSnapshot,
diff --git a/src/backend/commands/prepare.c b/src/backend/commands/prepare.c
index 5420da4a6265d0f8f8ee5765c5130d7d13840cc1..7932f838fee93c13d8cb5e428219a68b1bdf2b76 100644
--- a/src/backend/commands/prepare.c
+++ b/src/backend/commands/prepare.c
@@ -10,7 +10,7 @@
  * Copyright (c) 2002-2005, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/commands/prepare.c,v 1.41 2005/10/15 02:49:15 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/commands/prepare.c,v 1.42 2005/10/21 16:43:33 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -605,6 +605,15 @@ ExplainExecuteQuery(ExplainStmt *stmt, TupOutputState *tstate)
 				query->into = execstmt->into;
 			}
 
+			/*
+			 * Update snapshot command ID to ensure this query sees results of
+			 * any previously executed queries.  (It's a bit cheesy to modify
+			 * ActiveSnapshot without making a copy, but for the limited ways
+			 * in which EXPLAIN can be invoked, I think it's OK, because the
+			 * active snapshot shouldn't be shared with anything else anyway.)
+			 */
+			ActiveSnapshot->curcid = GetCurrentCommandId();
+
 			/* Create a QueryDesc requesting no output */
 			qdesc = CreateQueryDesc(query, plan,
 									ActiveSnapshot, InvalidSnapshot,