Don't print database's tablespace in pg_dump -C --no-tablespaces output.
authorTom Lane
Thu, 8 Sep 2016 14:48:03 +0000 (10:48 -0400)
committerTom Lane
Thu, 8 Sep 2016 14:48:03 +0000 (10:48 -0400)
If the database has a non-default tablespace, we emitted a TABLESPACE
clause in the CREATE DATABASE command emitted by -C, even if
--no-tablespaces was also specified.  This seems wrong, and it's
inconsistent with what pg_dumpall does, so change it.  Per bug #14315
from Danylo Hlynskyi.

Back-patch to 9.5.  The bug is much older, but it'd be a more invasive
change before 9.5 because dumpDatabase() hasn't got an easy way to get
to the outputNoTablespaces flag.  Doesn't seem worth the work given
the lack of previous complaints.

Report: <20160908081953[email protected]>

src/bin/pg_dump/pg_dump.c

index 715e75c7cad7e5d0c3d7abd3864567cdf271e74b..df6d2e73460a25de5a37e76b07fe091282892350 100644 (file)
@@ -2444,7 +2444,8 @@ dumpDatabase(Archive *fout)
        appendPQExpBufferStr(creaQry, " LC_CTYPE = ");
        appendStringLiteralAH(creaQry, ctype, fout);
    }
-   if (strlen(tablespace) > 0 && strcmp(tablespace, "pg_default") != 0)
+   if (strlen(tablespace) > 0 && strcmp(tablespace, "pg_default") != 0 &&
+       !dopt->outputNoTablespaces)
        appendPQExpBuffer(creaQry, " TABLESPACE = %s",
                          fmtId(tablespace));
    appendPQExpBufferStr(creaQry, ";\n");