]> granicus.if.org Git - postgresql/commitdiff
Fix logic to prevent pg_dump from dumping system schemas; bug introduced
authorBruce Momjian <bruce@momjian.us>
Wed, 2 Aug 2006 21:43:43 +0000 (21:43 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 2 Aug 2006 21:43:43 +0000 (21:43 +0000)
in recent -t/-n/-T/-N patch.

Small style cleanups.

src/bin/pg_dump/pg_dump.c

index 5e3834a6cdcad1a31f44619f0b0c494c6f0556af..85f779d0ae5b7d8b7b82a2b80f8ee5f932f196e3 100644 (file)
@@ -12,7 +12,7 @@
  *     by PostgreSQL
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.444 2006/08/01 21:05:00 momjian Exp $
+ *       $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.445 2006/08/02 21:43:43 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -625,6 +625,7 @@ main(int argc, char **argv)
        /* Check schema selection flags */
        resetPQExpBuffer(query);
        switch_include_exclude = true;
+
        for (this_obj_name = schemaList; this_obj_name; this_obj_name = this_obj_name->next)
        {
                if (switch_include_exclude)
@@ -686,6 +687,7 @@ main(int argc, char **argv)
        /* Check table selection flags */
        resetPQExpBuffer(query);
        switch_include_exclude = true;
+
        for (this_obj_name = tableList; this_obj_name; this_obj_name = this_obj_name->next)
        {
                if (switch_include_exclude)
@@ -937,21 +939,23 @@ selectDumpableNamespace(NamespaceInfo *nsinfo)
         * namespaces.  If specific namespaces are being dumped, dump just 
         * those namespaces. Otherwise, dump all non-system namespaces.
         */
+       nsinfo->dobj.dump = false;
+
        if (matchingTables != NULL)
-               nsinfo->dobj.dump = false;
+               /* false */;
        else if (matchingSchemas != NULL)
        {
-               char *searchname = NULL;
-               searchname = malloc(20);
-               sprintf(searchname, " %d ", nsinfo->dobj.catId.oid);
-               if (strstr(matchingSchemas, searchname) != NULL)
+               char *search_oid = malloc(20);
+
+               sprintf(search_oid, " %d ", nsinfo->dobj.catId.oid);
+               if (strstr(matchingSchemas, search_oid) != NULL)
                        nsinfo->dobj.dump = true;
-               free(searchname);
+
+               free(search_oid);
        }
-       else if (strncmp(nsinfo->dobj.name, "pg_", 3) == 0 ||
-                        strcmp(nsinfo->dobj.name, "information_schema") == 0)
-               nsinfo->dobj.dump = false;
-       else
+       /* The server prevents users from creating pg_ schemas */
+       else if (strncmp(nsinfo->dobj.name, "pg_", 3) != 0 &&
+                        strcmp(nsinfo->dobj.name, "information_schema") != 0)
                nsinfo->dobj.dump = true;
 }
 
@@ -968,16 +972,21 @@ selectDumpableTable(TableInfo *tbinfo)
         * dump.
         */
        tbinfo->dobj.dump = false;
-       if (tbinfo->dobj.namespace->dobj.dump || matchingTables == NULL)
-               tbinfo->dobj.dump = true;
+
+       if (matchingTables == NULL)
+       {
+               if (tbinfo->dobj.namespace->dobj.dump)
+                       tbinfo->dobj.dump = true;
+       }
        else
        {
-               char *searchname = NULL;
-               searchname = malloc(20);
-               sprintf(searchname, " %d ", tbinfo->dobj.catId.oid);
-               if (strstr(matchingTables, searchname) != NULL)
+               char *search_oid = malloc(20);
+
+               sprintf(search_oid, " %d ", tbinfo->dobj.catId.oid);
+               if (strstr(matchingTables, search_oid) != NULL)
                        tbinfo->dobj.dump = true;
-               free(searchname);
+
+               free(search_oid);
        }
 }