]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Tweak pg_dump to handle default tablespaces correctly --- same logic
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 18 Oct 2004 00:20:41 +0000 (00:20 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 18 Oct 2004 00:20:41 +0000 (00:20 +0000)
as the corrected pg_get_indexdef code.

src/bin/pg_dump/pg_dump.c

index c9ad16af677922ec64443ac98e1a916b05c7a0bb..27f7fc3401728c986a39e805ac1b3d3e282e000a 100644 (file)
@@ -12,7 +12,7 @@
  *     by PostgreSQL
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.388 2004/10/06 23:31:45 neilc Exp $
+ *       $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.389 2004/10/18 00:20:41 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -108,6 +108,9 @@ static const CatalogId nilCatalogId = {0, 0};
 static NamespaceInfo *g_namespaces;
 static int     g_numNamespaces;
 
+/* need the name of the database's default tablespace */
+static char *dbDefaultTableSpace;
+
 /* flag to turn on/off dollar quoting */
 static int     disable_dollar_quoting = 0;
 
@@ -1249,6 +1252,9 @@ dumpDatabase(Archive *AH)
        encoding = PQgetvalue(res, 0, i_encoding);
        tablespace = PQgetvalue(res, 0, i_tablespace);
 
+       /* save dattablespace name for later dump routines */
+       dbDefaultTableSpace = strdup(tablespace);
+
        appendPQExpBuffer(creaQry, "CREATE DATABASE %s WITH TEMPLATE = template0",
                                          fmtId(datname));
        if (strlen(encoding) > 0)
@@ -1257,7 +1263,8 @@ dumpDatabase(Archive *AH)
                appendStringLiteral(creaQry, encoding, true);
        }
        if (strlen(tablespace) > 0 && strcmp(tablespace, "pg_default") != 0)
-               appendPQExpBuffer(creaQry, " TABLESPACE = %s", fmtId(tablespace));
+               appendPQExpBuffer(creaQry, " TABLESPACE = %s",
+                                                 fmtId(tablespace));
        appendPQExpBuffer(creaQry, ";\n");
 
        appendPQExpBuffer(delQry, "DROP DATABASE %s;\n",
@@ -4428,7 +4435,7 @@ dumpNamespace(Archive *fout, NamespaceInfo *nspinfo)
        appendPQExpBuffer(q, "CREATE SCHEMA %s AUTHORIZATION %s",
                                          qnspname, fmtId(nspinfo->usename));
 
-       /* Add tablespace qualifier, if not default */
+       /* Add tablespace qualifier, if not default for database */
        if (strlen(nspinfo->nsptablespace) != 0)
                appendPQExpBuffer(q, " TABLESPACE %s",
                                                  fmtId(nspinfo->nsptablespace));
@@ -6652,13 +6659,16 @@ dumpTableSchema(Archive *fout, TableInfo *tbinfo)
                        appendPQExpBuffer(q, ")");
                }
 
-               /* Output tablespace clause if necessary */
-               if (strlen(tbinfo->reltablespace) != 0 &&
-                       strcmp(tbinfo->reltablespace,
+               /* Output tablespace clause if different from parent schema's */
+               if (strcmp(tbinfo->reltablespace,
                                   tbinfo->dobj.namespace->nsptablespace) != 0)
                {
-                       appendPQExpBuffer(q, " TABLESPACE %s",
-                                                         fmtId(tbinfo->reltablespace));
+                       if (strlen(tbinfo->reltablespace) != 0)
+                               appendPQExpBuffer(q, " TABLESPACE %s",
+                                                                 fmtId(tbinfo->reltablespace));
+                       else if (strlen(dbDefaultTableSpace) != 0)
+                               appendPQExpBuffer(q, " TABLESPACE %s",
+                                                                 fmtId(dbDefaultTableSpace));
                }
 
                appendPQExpBuffer(q, ";\n");
@@ -6947,13 +6957,16 @@ dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
 
                appendPQExpBuffer(q, ")");
 
-               /* Output tablespace clause if necessary */
-               if (strlen(indxinfo->tablespace) != 0 &&
-                       strcmp(indxinfo->tablespace,
+               /* Output tablespace clause if different from parent table's */
+               if (strcmp(indxinfo->tablespace,
                                   indxinfo->indextable->reltablespace) != 0)
                {
-                       appendPQExpBuffer(q, " USING INDEX TABLESPACE %s",
-                                                         fmtId(indxinfo->tablespace));
+                       if (strlen(indxinfo->tablespace) != 0)
+                               appendPQExpBuffer(q, " USING INDEX TABLESPACE %s",
+                                                                 fmtId(indxinfo->tablespace));
+                       else if (strlen(dbDefaultTableSpace) != 0)
+                               appendPQExpBuffer(q, " USING INDEX TABLESPACE %s",
+                                                                 fmtId(dbDefaultTableSpace));
                }
 
                appendPQExpBuffer(q, ";\n");