diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 32e172b133f55caf6f42292a94a8e00edaa4b04e..a636407431072330ad73e7e60142761a0d6a6c66 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *		$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.150 2007/11/24 17:45:32 momjian Exp $
+ *		$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.151 2007/11/24 20:26:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -245,23 +245,24 @@ RestoreArchive(Archive *AHX, RestoreOptions *ropt)
 				_selectOutputSchema(AH, te->namespace);
 				/* Drop it */
 				ahprintf(AH, "%s", te->dropStmt);
-				if (strcmp(te->desc, "SCHEMA") == 0)
-				{
-					/*
-					 * If we dropped a schema, we know we are going to be
-					 * creating one later so don't remember the current one
-					 * so we try later. The previous 'search_path' setting
-					 * might have failed because the schema didn't exist
-					 * (and now it certainly doesn't exist), so force
-					 * search_path to be set as part of the next operation
-					 * and it might succeed.
-					 */
-					if (AH->currSchema)
-						free(AH->currSchema);
-					AH->currSchema = strdup("");
-				}
 			}
 		}
+
+		/*
+		 * _selectOutputSchema may have set currSchema to reflect the effect
+		 * of a "SET search_path" command it emitted.  However, by now we may
+		 * have dropped that schema; or it might not have existed in the first
+		 * place.  In either case the effective value of search_path will not
+		 * be what we think.  Forcibly reset currSchema so that we will
+		 * re-establish the search_path setting when needed (after creating
+		 * the schema).
+		 *
+		 * If we treated users as pg_dump'able objects then we'd need to reset
+		 * currUser here too.
+		 */
+		if (AH->currSchema)
+			free(AH->currSchema);
+		AH->currSchema = strdup("");
 	}
 
 	/*