When running pg_dump --clean against a server that doesn't have schemas 
the namespace is blank and ends up producing a dump full off things like:

DROP TABLE "".tab;

The attached patch only includes a schema if one exists.  There are
numerous comments about the DROPs needing to be fully qualified to avoid
conflicting with pg_catalog, but this should be mostly safe because it
would require a user defined object to be present in a later server
version with the same name, and it is difficult to impossible to drop
system objects anyway.

Kris Jurka
Index: src/bin/pg_dump/pg_dump.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/bin/pg_dump/pg_dump.c,v
retrieving revision 1.376
diff -c -r1.376 pg_dump.c
*** src/bin/pg_dump/pg_dump.c   21 Jun 2004 13:36:41 -0000      1.376
--- src/bin/pg_dump/pg_dump.c   24 Jun 2004 12:21:45 -0000
***************
*** 4616,4625 ****
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delq, "DROP TYPE %s.",
!                                         fmtId(tinfo->dobj.namespace->dobj.name));
!       appendPQExpBuffer(delq, "%s CASCADE;\n",
!                                         fmtId(tinfo->dobj.name));
  
        appendPQExpBuffer(q,
                                          "CREATE TYPE %s (\n"
--- 4616,4624 ----
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delq, "DROP TYPE %s CASCADE;\n",
!                                         
fmtQualifiedId(tinfo->dobj.namespace->dobj.name,
!                                                 tinfo->dobj.name));
  
        appendPQExpBuffer(q,
                                          "CREATE TYPE %s (\n"
***************
*** 4795,4804 ****
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delq, "DROP DOMAIN %s.",
!                                         fmtId(tinfo->dobj.namespace->dobj.name));
!       appendPQExpBuffer(delq, "%s;\n",
!                                         fmtId(tinfo->dobj.name));
  
        ArchiveEntry(fout, tinfo->dobj.catId, tinfo->dobj.dumpId,
                                 tinfo->dobj.name,
--- 4794,4802 ----
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delq, "DROP DOMAIN %s;\n",
!                                         
fmtQualifiedId(tinfo->dobj.namespace->dobj.name,
!                                                 tinfo->dobj.name));
  
        ArchiveEntry(fout, tinfo->dobj.catId, tinfo->dobj.dumpId,
                                 tinfo->dobj.name,
***************
*** 4888,4897 ****
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delq, "DROP TYPE %s.",
!                                         fmtId(tinfo->dobj.namespace->dobj.name));
!       appendPQExpBuffer(delq, "%s;\n",
!                                         fmtId(tinfo->dobj.name));
  
        ArchiveEntry(fout, tinfo->dobj.catId, tinfo->dobj.dumpId,
                                 tinfo->dobj.name,
--- 4886,4894 ----
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delq, "DROP TYPE %s;\n",
!                                         
fmtQualifiedId(tinfo->dobj.namespace->dobj.name,
!                                                 tinfo->dobj.name));
  
        ArchiveEntry(fout, tinfo->dobj.catId, tinfo->dobj.dumpId,
                                 tinfo->dobj.name,
***************
*** 5221,5228 ****
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delqry, "DROP FUNCTION %s.%s;\n",
!                                         fmtId(finfo->dobj.namespace->dobj.name),
                                          funcsig);
  
        rettypename = getFormattedTypeName(finfo->prorettype, zeroAsOpaque);
--- 5218,5228 ----
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delqry, "DROP FUNCTION ");
!       if (strlen(finfo->dobj.namespace->dobj.name) != 0)
!               appendPQExpBuffer(delqry, "%s.",
!                                         fmtId(finfo->dobj.namespace->dobj.name));
!       appendPQExpBuffer(delqry, "%s;\n",
                                          funcsig);
  
        rettypename = getFormattedTypeName(finfo->prorettype, zeroAsOpaque);
***************
*** 5644,5651 ****
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delq, "DROP OPERATOR %s.%s;\n",
!                                         fmtId(oprinfo->dobj.namespace->dobj.name),
                                          oprid->data);
  
        appendPQExpBuffer(q, "CREATE OPERATOR %s (\n%s\n);\n",
--- 5644,5654 ----
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delq, "DROP OPERATOR ");
!       if (strlen(oprinfo->dobj.namespace->dobj.name) != 0)
!               appendPQExpBuffer(delq, "%s.",
!                                         fmtId(oprinfo->dobj.namespace->dobj.name));
!       appendPQExpBuffer(delq, "%s;\n",
                                          oprid->data);
  
        appendPQExpBuffer(q, "CREATE OPERATOR %s (\n%s\n);\n",
***************
*** 5854,5862 ****
         * pg_catalog
         */
        appendPQExpBuffer(delq, "DROP OPERATOR CLASS %s",
!                                         fmtId(opcinfo->dobj.namespace->dobj.name));
!       appendPQExpBuffer(delq, ".%s",
!                                         fmtId(opcinfo->dobj.name));
        appendPQExpBuffer(delq, " USING %s;\n",
                                          fmtId(amname));
  
--- 5857,5864 ----
         * pg_catalog
         */
        appendPQExpBuffer(delq, "DROP OPERATOR CLASS %s",
!                                         
fmtQualifiedId(opcinfo->dobj.namespace->dobj.name,
!                                                 opcinfo->dobj.name));
        appendPQExpBuffer(delq, " USING %s;\n",
                                          fmtId(amname));
  
***************
*** 6054,6063 ****
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delq, "DROP CONVERSION %s",
!                                         fmtId(convinfo->dobj.namespace->dobj.name));
!       appendPQExpBuffer(delq, ".%s;\n",
!                                         fmtId(convinfo->dobj.name));
  
        appendPQExpBuffer(q, "CREATE %sCONVERSION %s FOR ",
                                        (condefault) ? "DEFAULT " : "",
--- 6056,6064 ----
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delq, "DROP CONVERSION %s;\n",
!                                         
fmtQualifiedId(convinfo->dobj.namespace->dobj.name,
!                                                 convinfo->dobj.name));
  
        appendPQExpBuffer(q, "CREATE %sCONVERSION %s FOR ",
                                        (condefault) ? "DEFAULT " : "",
***************
*** 6295,6302 ****
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delq, "DROP AGGREGATE %s.%s;\n",
!                                         
fmtId(agginfo->aggfn.dobj.namespace->dobj.name),
                                          aggsig);
  
        appendPQExpBuffer(q, "CREATE AGGREGATE %s (\n%s\n);\n",
--- 6296,6306 ----
         * DROP must be fully qualified in case same name appears in
         * pg_catalog
         */
!       appendPQExpBuffer(delq, "DROP AGGREGATE ");
!       if (strlen(agginfo->aggfn.dobj.namespace->dobj.name) != 0)
!               appendPQExpBuffer(delq, "%s.",
!                                         
fmtId(agginfo->aggfn.dobj.namespace->dobj.name));
!       appendPQExpBuffer(delq, "%s;\n",
                                          aggsig);
  
        appendPQExpBuffer(q, "CREATE AGGREGATE %s (\n%s\n);\n",
***************
*** 6490,6499 ****
                 * DROP must be fully qualified in case same name appears in
                 * pg_catalog
                 */
!               appendPQExpBuffer(delq, "DROP VIEW %s.",
!                                                 
fmtId(tbinfo->dobj.namespace->dobj.name));
!               appendPQExpBuffer(delq, "%s;\n",
!                                                 fmtId(tbinfo->dobj.name));
  
                appendPQExpBuffer(q, "CREATE VIEW %s AS\n    %s\n",
                                                  fmtId(tbinfo->dobj.name), viewdef);
--- 6494,6502 ----
                 * DROP must be fully qualified in case same name appears in
                 * pg_catalog
                 */
!               appendPQExpBuffer(delq, "DROP VIEW %s;\n",
!                                                 
fmtQualifiedId(tbinfo->dobj.namespace->dobj.name,
!                                                         tbinfo->dobj.name));
  
                appendPQExpBuffer(q, "CREATE VIEW %s AS\n    %s\n",
                                                  fmtId(tbinfo->dobj.name), viewdef);
***************
*** 6510,6519 ****
                 * DROP must be fully qualified in case same name appears in
                 * pg_catalog
                 */
!               appendPQExpBuffer(delq, "DROP TABLE %s.",
!                                                 
fmtId(tbinfo->dobj.namespace->dobj.name));
!               appendPQExpBuffer(delq, "%s;\n",
!                                                 fmtId(tbinfo->dobj.name));
  
                appendPQExpBuffer(q, "CREATE TABLE %s (",
                                                  fmtId(tbinfo->dobj.name));
--- 6513,6521 ----
                 * DROP must be fully qualified in case same name appears in
                 * pg_catalog
                 */
!               appendPQExpBuffer(delq, "DROP TABLE %s;\n",
!                                                 
fmtQualifiedId(tbinfo->dobj.namespace->dobj.name,
!                                                         tbinfo->dobj.name));
  
                appendPQExpBuffer(q, "CREATE TABLE %s (",
                                                  fmtId(tbinfo->dobj.name));
***************
*** 6741,6751 ****
         * DROP must be fully qualified in case same name appears
         * in pg_catalog
         */
!       appendPQExpBuffer(delq, "ALTER TABLE %s.",
!                                         fmtId(tbinfo->dobj.namespace->dobj.name));
!       appendPQExpBuffer(delq, "%s ",
!                                         fmtId(tbinfo->dobj.name));
!       appendPQExpBuffer(delq, "ALTER COLUMN %s DROP DEFAULT;\n",
                                          fmtId(tbinfo->attnames[adnum - 1]));
  
        ArchiveEntry(fout, adinfo->dobj.catId, adinfo->dobj.dumpId,
--- 6743,6752 ----
         * DROP must be fully qualified in case same name appears
         * in pg_catalog
         */
!       appendPQExpBuffer(delq, "ALTER TABLE %s",
!                                         
fmtQualifiedId(tbinfo->dobj.namespace->dobj.name,
!                                                 tbinfo->dobj.name));
!       appendPQExpBuffer(delq, " ALTER COLUMN %s DROP DEFAULT;\n",
                                          fmtId(tbinfo->attnames[adnum - 1]));
  
        ArchiveEntry(fout, adinfo->dobj.catId, adinfo->dobj.dumpId,
***************
*** 6833,6842 ****
                 * DROP must be fully qualified in case same name appears
                 * in pg_catalog
                 */
!               appendPQExpBuffer(delq, "DROP INDEX %s.",
!                                                 
fmtId(tbinfo->dobj.namespace->dobj.name));
!               appendPQExpBuffer(delq, "%s;\n",
!                                                 fmtId(indxinfo->dobj.name));
  
                ArchiveEntry(fout, indxinfo->dobj.catId, indxinfo->dobj.dumpId,
                                         indxinfo->dobj.name,
--- 6834,6842 ----
                 * DROP must be fully qualified in case same name appears
                 * in pg_catalog
                 */
!               appendPQExpBuffer(delq, "DROP INDEX %s;\n",
!                                                 
fmtQualifiedId(tbinfo->dobj.namespace->dobj.name,
!                                                         indxinfo->dobj.name));
  
                ArchiveEntry(fout, indxinfo->dobj.catId, indxinfo->dobj.dumpId,
                                         indxinfo->dobj.name,
***************
*** 6929,6939 ****
                 * DROP must be fully qualified in case same name appears
                 * in pg_catalog
                 */
!               appendPQExpBuffer(delq, "ALTER TABLE ONLY %s.",
!                                                 
fmtId(tbinfo->dobj.namespace->dobj.name));
!               appendPQExpBuffer(delq, "%s ",
!                                                 fmtId(tbinfo->dobj.name));
!               appendPQExpBuffer(delq, "DROP CONSTRAINT %s;\n",
                                                  fmtId(coninfo->dobj.name));
  
                ArchiveEntry(fout, coninfo->dobj.catId, coninfo->dobj.dumpId,
--- 6929,6938 ----
                 * DROP must be fully qualified in case same name appears
                 * in pg_catalog
                 */
!               appendPQExpBuffer(delq, "ALTER TABLE ONLY %s",
!                                                 
fmtQualifiedId(tbinfo->dobj.namespace->dobj.name,
!                                                         tbinfo->dobj.name));
!               appendPQExpBuffer(delq, " DROP CONSTRAINT %s;\n",
                                                  fmtId(coninfo->dobj.name));
  
                ArchiveEntry(fout, coninfo->dobj.catId, coninfo->dobj.dumpId,
***************
*** 6960,6970 ****
                 * DROP must be fully qualified in case same name appears in
                 * pg_catalog
                 */
!               appendPQExpBuffer(delq, "ALTER TABLE ONLY %s.",
!                                                 
fmtId(tbinfo->dobj.namespace->dobj.name));
!               appendPQExpBuffer(delq, "%s ",
!                                                 fmtId(tbinfo->dobj.name));
!               appendPQExpBuffer(delq, "DROP CONSTRAINT %s;\n",
                                                  fmtId(coninfo->dobj.name));
  
                ArchiveEntry(fout, coninfo->dobj.catId, coninfo->dobj.dumpId,
--- 6959,6968 ----
                 * DROP must be fully qualified in case same name appears in
                 * pg_catalog
                 */
!               appendPQExpBuffer(delq, "ALTER TABLE ONLY %s",
!                                                 
fmtQualifiedId(tbinfo->dobj.namespace->dobj.name,
!                                                         tbinfo->dobj.name));
!               appendPQExpBuffer(delq, " DROP CONSTRAINT %s;\n",
                                                  fmtId(coninfo->dobj.name));
  
                ArchiveEntry(fout, coninfo->dobj.catId, coninfo->dobj.dumpId,
***************
*** 6993,7003 ****
                         * DROP must be fully qualified in case same name appears in
                         * pg_catalog
                         */
!                       appendPQExpBuffer(delq, "ALTER TABLE %s.",
!                                                         
fmtId(tbinfo->dobj.namespace->dobj.name));
!                       appendPQExpBuffer(delq, "%s ",
!                                                         fmtId(tbinfo->dobj.name));
!                       appendPQExpBuffer(delq, "DROP CONSTRAINT %s;\n",
                                                          fmtId(coninfo->dobj.name));
  
                        ArchiveEntry(fout, coninfo->dobj.catId, coninfo->dobj.dumpId,
--- 6991,7000 ----
                         * DROP must be fully qualified in case same name appears in
                         * pg_catalog
                         */
!                       appendPQExpBuffer(delq, "ALTER TABLE %s",
!                                                         
fmtQualifiedId(tbinfo->dobj.namespace->dobj.name,
!                                                                 tbinfo->dobj.name));
!                       appendPQExpBuffer(delq, " DROP CONSTRAINT %s;\n",
                                                          fmtId(coninfo->dobj.name));
  
                        ArchiveEntry(fout, coninfo->dobj.catId, coninfo->dobj.dumpId,
***************
*** 7027,7037 ****
                         * DROP must be fully qualified in case same name appears in
                         * pg_catalog
                         */
!                       appendPQExpBuffer(delq, "ALTER DOMAIN %s.",
!                                                         
fmtId(tinfo->dobj.namespace->dobj.name));
!                       appendPQExpBuffer(delq, "%s ",
!                                                         fmtId(tinfo->dobj.name));
!                       appendPQExpBuffer(delq, "DROP CONSTRAINT %s;\n",
                                                          fmtId(coninfo->dobj.name));
  
                        ArchiveEntry(fout, coninfo->dobj.catId, coninfo->dobj.dumpId,
--- 7024,7033 ----
                         * DROP must be fully qualified in case same name appears in
                         * pg_catalog
                         */
!                       appendPQExpBuffer(delq, "ALTER DOMAIN %s",
!                                                         
fmtQualifiedId(tinfo->dobj.namespace->dobj.name,
!                                                                 tinfo->dobj.name));
!                       appendPQExpBuffer(delq, " DROP CONSTRAINT %s;\n",
                                                          fmtId(coninfo->dobj.name));
  
                        ArchiveEntry(fout, coninfo->dobj.catId, coninfo->dobj.dumpId,
***************
*** 7269,7278 ****
                 * DROP must be fully qualified in case same name appears in
                 * pg_catalog
                 */
!               appendPQExpBuffer(delqry, "DROP SEQUENCE %s.",
!                                                 
fmtId(tbinfo->dobj.namespace->dobj.name));
!               appendPQExpBuffer(delqry, "%s;\n",
!                                                 fmtId(tbinfo->dobj.name));
  
                resetPQExpBuffer(query);
                appendPQExpBuffer(query,
--- 7265,7273 ----
                 * DROP must be fully qualified in case same name appears in
                 * pg_catalog
                 */
!               appendPQExpBuffer(delqry, "DROP SEQUENCE %s;\n",
!                                                 
fmtQualifiedId(tbinfo->dobj.namespace->dobj.name,
!                                                         tbinfo->dobj.name));
  
                resetPQExpBuffer(query);
                appendPQExpBuffer(query,
***************
*** 7370,7379 ****
         */
        appendPQExpBuffer(delqry, "DROP TRIGGER %s ",
                                          fmtId(tginfo->dobj.name));
!       appendPQExpBuffer(delqry, "ON %s.",
!                                         fmtId(tbinfo->dobj.namespace->dobj.name));
!       appendPQExpBuffer(delqry, "%s;\n",
!                                         fmtId(tbinfo->dobj.name));
  
        if (tginfo->tgisconstraint)
        {
--- 7365,7373 ----
         */
        appendPQExpBuffer(delqry, "DROP TRIGGER %s ",
                                          fmtId(tginfo->dobj.name));
!       appendPQExpBuffer(delqry, "ON %s;\n",
!                                         
fmtQualifiedId(tbinfo->dobj.namespace->dobj.name,
!                                               tbinfo->dobj.name));
  
        if (tginfo->tgisconstraint)
        {
***************
*** 7579,7588 ****
         */
        appendPQExpBuffer(delcmd, "DROP RULE %s ",
                                          fmtId(rinfo->dobj.name));
!       appendPQExpBuffer(delcmd, "ON %s.",
!                                         fmtId(tbinfo->dobj.namespace->dobj.name));
!       appendPQExpBuffer(delcmd, "%s;\n",
!                                         fmtId(tbinfo->dobj.name));
  
        ArchiveEntry(fout, rinfo->dobj.catId, rinfo->dobj.dumpId,
                                 rinfo->dobj.name,
--- 7573,7581 ----
         */
        appendPQExpBuffer(delcmd, "DROP RULE %s ",
                                          fmtId(rinfo->dobj.name));
!       appendPQExpBuffer(delcmd, "ON %s;\n",
!                                         
fmtQualifiedId(tbinfo->dobj.namespace->dobj.name,
!                                               tbinfo->dobj.name));
  
        ArchiveEntry(fout, rinfo->dobj.catId, rinfo->dobj.dumpId,
                                 rinfo->dobj.name,
---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to