Tweak pg_dump to handle default tablespaces correctly --- same logic

as the corrected pg_get_indexdef code.
This commit is contained in:
Tom Lane 2004-10-18 00:20:41 +00:00
parent edb1ba113d
commit 877179245d

View File

@ -12,7 +12,7 @@
* by PostgreSQL * by PostgreSQL
* *
* IDENTIFICATION * 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 NamespaceInfo *g_namespaces;
static int g_numNamespaces; static int g_numNamespaces;
/* need the name of the database's default tablespace */
static char *dbDefaultTableSpace;
/* flag to turn on/off dollar quoting */ /* flag to turn on/off dollar quoting */
static int disable_dollar_quoting = 0; static int disable_dollar_quoting = 0;
@ -1249,6 +1252,9 @@ dumpDatabase(Archive *AH)
encoding = PQgetvalue(res, 0, i_encoding); encoding = PQgetvalue(res, 0, i_encoding);
tablespace = PQgetvalue(res, 0, i_tablespace); tablespace = PQgetvalue(res, 0, i_tablespace);
/* save dattablespace name for later dump routines */
dbDefaultTableSpace = strdup(tablespace);
appendPQExpBuffer(creaQry, "CREATE DATABASE %s WITH TEMPLATE = template0", appendPQExpBuffer(creaQry, "CREATE DATABASE %s WITH TEMPLATE = template0",
fmtId(datname)); fmtId(datname));
if (strlen(encoding) > 0) if (strlen(encoding) > 0)
@ -1257,7 +1263,8 @@ dumpDatabase(Archive *AH)
appendStringLiteral(creaQry, encoding, true); appendStringLiteral(creaQry, encoding, true);
} }
if (strlen(tablespace) > 0 && strcmp(tablespace, "pg_default") != 0) 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(creaQry, ";\n");
appendPQExpBuffer(delQry, "DROP DATABASE %s;\n", appendPQExpBuffer(delQry, "DROP DATABASE %s;\n",
@ -4428,7 +4435,7 @@ dumpNamespace(Archive *fout, NamespaceInfo *nspinfo)
appendPQExpBuffer(q, "CREATE SCHEMA %s AUTHORIZATION %s", appendPQExpBuffer(q, "CREATE SCHEMA %s AUTHORIZATION %s",
qnspname, fmtId(nspinfo->usename)); qnspname, fmtId(nspinfo->usename));
/* Add tablespace qualifier, if not default */ /* Add tablespace qualifier, if not default for database */
if (strlen(nspinfo->nsptablespace) != 0) if (strlen(nspinfo->nsptablespace) != 0)
appendPQExpBuffer(q, " TABLESPACE %s", appendPQExpBuffer(q, " TABLESPACE %s",
fmtId(nspinfo->nsptablespace)); fmtId(nspinfo->nsptablespace));
@ -6652,13 +6659,16 @@ dumpTableSchema(Archive *fout, TableInfo *tbinfo)
appendPQExpBuffer(q, ")"); appendPQExpBuffer(q, ")");
} }
/* Output tablespace clause if necessary */ /* Output tablespace clause if different from parent schema's */
if (strlen(tbinfo->reltablespace) != 0 && if (strcmp(tbinfo->reltablespace,
strcmp(tbinfo->reltablespace,
tbinfo->dobj.namespace->nsptablespace) != 0) tbinfo->dobj.namespace->nsptablespace) != 0)
{ {
appendPQExpBuffer(q, " TABLESPACE %s", if (strlen(tbinfo->reltablespace) != 0)
fmtId(tbinfo->reltablespace)); appendPQExpBuffer(q, " TABLESPACE %s",
fmtId(tbinfo->reltablespace));
else if (strlen(dbDefaultTableSpace) != 0)
appendPQExpBuffer(q, " TABLESPACE %s",
fmtId(dbDefaultTableSpace));
} }
appendPQExpBuffer(q, ";\n"); appendPQExpBuffer(q, ";\n");
@ -6947,13 +6957,16 @@ dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
appendPQExpBuffer(q, ")"); appendPQExpBuffer(q, ")");
/* Output tablespace clause if necessary */ /* Output tablespace clause if different from parent table's */
if (strlen(indxinfo->tablespace) != 0 && if (strcmp(indxinfo->tablespace,
strcmp(indxinfo->tablespace,
indxinfo->indextable->reltablespace) != 0) indxinfo->indextable->reltablespace) != 0)
{ {
appendPQExpBuffer(q, " USING INDEX TABLESPACE %s", if (strlen(indxinfo->tablespace) != 0)
fmtId(indxinfo->tablespace)); 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"); appendPQExpBuffer(q, ";\n");