If pg_dump drops a schema, make sure 'search_path' it SET the next time
authorBruce Momjian
Sat, 24 Nov 2007 17:45:32 +0000 (17:45 +0000)
committerBruce Momjian
Sat, 24 Nov 2007 17:45:32 +0000 (17:45 +0000)
it is needed --- basically don't remember the previous 'search_path'
after a drop schema because it might have failed but be created later.

src/bin/pg_dump/pg_backup_archiver.c

index 3f858a6b93d3625eeaa9ef778862f558bf309cc7..32e172b133f55caf6f42292a94a8e00edaa4b04e 100644 (file)
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *     $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.149 2007/11/15 21:14:41 momjian Exp $
+ *     $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.150 2007/11/24 17:45:32 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -245,6 +245,21 @@ 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("");
+               }
            }
        }
    }