diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 8b73858..9286ce5 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -1362,9 +1362,20 @@ UtilityContainsQuery(Node *parsetree)
 	switch (nodeTag(parsetree))
 	{
 		case T_ExplainStmt:
-			Assert(IsA(((ExplainStmt *) parsetree)->query, Query));
-			return (Query *) ((ExplainStmt *) parsetree)->query;
-
+			{
+				Query *qry;
+				Assert(IsA(((ExplainStmt *) parsetree)->query, Query));
+				qry = (Query *) ((ExplainStmt *) parsetree)->query;
+				/*
+				 * Any SELECT..INTO clause get transformed to CreateTableAsStmt,
+				 * and thats CMD_UTILITY stmt. So if CMD_UTILITY found for any
+				 * ExplainStmt Query then call UtilityConainsQuery() again
+				 * to fetch the proper contained query.
+				 */
+				if (qry->commandType == CMD_UTILITY)
+					qry = UtilityContainsQuery(qry->utilityStmt);
+				return qry;
+			}
 		case T_CreateTableAsStmt:
 			/* might or might not contain a Query ... */
 			if (IsA(((CreateTableAsStmt *) parsetree)->query, Query))
