Move resetting of currSchema to a spot where it's not vulnerable to getting
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 24 Nov 2007 20:26:49 +0000 (20:26 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
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 ec38549d2c0e370213bb1850a365297e528a92c7..b75ba776945caf90e324e06791e280cc4f443016 100644 (file)
@@ -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("");
        }
 
        /*