Move resetting of currSchema to a spot where it's not vulnerable to getting
authorTom Lane
Sat, 24 Nov 2007 20:26:49 +0000 (20:26 +0000)
committerTom Lane
Sat, 24 Nov 2007 20:26:49 +0000 (20:26 +0000)
missed in possible future partial-drop scenarios.  Improve comment.
Per report from Zoltan Boszormenyi.

src/bin/pg_dump/pg_backup_archiver.c

index 32e172b133f55caf6f42292a94a8e00edaa4b04e..a636407431072330ad73e7e60142761a0d6a6c66 100644 (file)
@@ -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("");
    }
 
    /*