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]