*** a/doc/src/sgml/ref/pg_dump.sgml
--- b/doc/src/sgml/ref/pg_dump.sgml
***************
*** 592,597 **** PostgreSQL documentation
--- 592,607 ----
+
+
+
+ It use conditional commands (with IF EXISTS
+ clause) for cleaning database schema.
+
+
+
+
+
*** a/doc/src/sgml/ref/pg_dumpall.sgml
--- b/doc/src/sgml/ref/pg_dumpall.sgml
***************
*** 270,275 **** PostgreSQL documentation
--- 270,285 ----
+
+
+
+ It use conditional commands (with IF EXISTS
+ clause) for cleaning database schema.
+
+
+
+
+
*** a/src/bin/pg_dump/pg_dump.c
--- b/src/bin/pg_dump/pg_dump.c
***************
*** 137,142 **** static int column_inserts = 0;
--- 137,143 ----
static int no_security_labels = 0;
static int no_unlogged_table_data = 0;
static int serializable_deferrable = 0;
+ static int conditional_drops = 0;
static void help(const char *progname);
***************
*** 338,343 **** main(int argc, char **argv)
--- 339,345 ----
{"attribute-inserts", no_argument, &column_inserts, 1},
{"binary-upgrade", no_argument, &binary_upgrade, 1},
{"column-inserts", no_argument, &column_inserts, 1},
+ {"conditional-drops", no_argument, &conditional_drops, 1},
{"disable-dollar-quoting", no_argument, &disable_dollar_quoting, 1},
{"disable-triggers", no_argument, &disable_triggers, 1},
{"exclude-table-data", required_argument, NULL, 4},
***************
*** 857,862 **** help(const char *progname)
--- 859,865 ----
printf(_(" -x, --no-privileges do not dump privileges (grant/revoke)\n"));
printf(_(" --binary-upgrade for use by upgrade utilities only\n"));
printf(_(" --column-inserts dump data as INSERT commands with column names\n"));
+ printf(_(" --conditional-drops use conditional drop commands for cleaning\n"));
printf(_(" --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n"));
printf(_(" --disable-triggers disable triggers during data-only restore\n"));
printf(_(" --exclude-table-data=TABLE do NOT dump data for the named table(s)\n"));
***************
*** 1987,1993 **** dumpDatabase(Archive *fout)
}
! appendPQExpBuffer(delQry, "DROP DATABASE %s;\n",
fmtId(datname));
dbDumpId = createDumpId();
--- 1990,1997 ----
}
! appendPQExpBuffer(delQry, "DROP DATABASE %s%s;\n",
! conditional_drops ? "IF EXISTS " : "",
fmtId(datname));
dbDumpId = createDumpId();
***************
*** 7431,7437 **** dumpNamespace(Archive *fout, NamespaceInfo *nspinfo)
qnspname = pg_strdup(fmtId(nspinfo->dobj.name));
! appendPQExpBuffer(delq, "DROP SCHEMA %s;\n", qnspname);
appendPQExpBuffer(q, "CREATE SCHEMA %s;\n", qnspname);
--- 7435,7443 ----
qnspname = pg_strdup(fmtId(nspinfo->dobj.name));
! appendPQExpBuffer(delq, "DROP SCHEMA %s%s;\n",
! conditional_drops ? "IF EXISTS " : "",
! qnspname);
appendPQExpBuffer(q, "CREATE SCHEMA %s;\n", qnspname);
***************
*** 7490,7496 **** dumpExtension(Archive *fout, ExtensionInfo *extinfo)
qextname = pg_strdup(fmtId(extinfo->dobj.name));
! appendPQExpBuffer(delq, "DROP EXTENSION %s;\n", qextname);
if (!binary_upgrade)
{
--- 7496,7504 ----
qextname = pg_strdup(fmtId(extinfo->dobj.name));
! appendPQExpBuffer(delq, "DROP EXTENSION %s%s;\n",
! conditional_drops ? "IF EXISTS " : "",
! qextname);
if (!binary_upgrade)
{
***************
*** 7664,7670 **** dumpEnumType(Archive *fout, TypeInfo *tyinfo)
* CASCADE shouldn't be required here as for normal types since the I/O
* functions are generic and do not get dropped.
*/
! appendPQExpBuffer(delq, "DROP TYPE %s.",
fmtId(tyinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s;\n",
qtypname);
--- 7672,7679 ----
* CASCADE shouldn't be required here as for normal types since the I/O
* functions are generic and do not get dropped.
*/
! appendPQExpBuffer(delq, "DROP TYPE %s%s.",
! conditional_drops ? "IF EXISTS " : "",
fmtId(tyinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s;\n",
qtypname);
***************
*** 7794,7800 **** dumpRangeType(Archive *fout, TypeInfo *tyinfo)
* CASCADE shouldn't be required here as for normal types since the I/O
* functions are generic and do not get dropped.
*/
! appendPQExpBuffer(delq, "DROP TYPE %s.",
fmtId(tyinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s;\n",
qtypname);
--- 7803,7810 ----
* CASCADE shouldn't be required here as for normal types since the I/O
* functions are generic and do not get dropped.
*/
! appendPQExpBuffer(delq, "DROP TYPE %s%s.",
! conditional_drops ? "IF EXISTS " : "",
fmtId(tyinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s;\n",
qtypname);
***************
*** 8134,8140 **** dumpBaseType(Archive *fout, TypeInfo *tyinfo)
* the type and its I/O functions makes it impossible to drop the type any
* other way.
*/
! appendPQExpBuffer(delq, "DROP TYPE %s.",
fmtId(tyinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s CASCADE;\n",
qtypname);
--- 8144,8151 ----
* the type and its I/O functions makes it impossible to drop the type any
* other way.
*/
! appendPQExpBuffer(delq, "DROP TYPE %s%s.",
! conditional_drops ? "IF EXISTS " : "",
fmtId(tyinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s CASCADE;\n",
qtypname);
***************
*** 8394,8400 **** dumpDomain(Archive *fout, TypeInfo *tyinfo)
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP DOMAIN %s.",
fmtId(tyinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s;\n",
qtypname);
--- 8405,8412 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP DOMAIN %s%s.",
! conditional_drops ? "IF EXISTS " : "",
fmtId(tyinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s;\n",
qtypname);
***************
*** 8609,8615 **** dumpCompositeType(Archive *fout, TypeInfo *tyinfo)
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP TYPE %s.",
fmtId(tyinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s;\n",
qtypname);
--- 8621,8628 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP TYPE %s%s.",
! conditional_drops ? "IF EXISTS " : "",
fmtId(tyinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s;\n",
qtypname);
***************
*** 8920,8926 **** dumpProcLang(Archive *fout, ProcLangInfo *plang)
else
lanschema = NULL;
! appendPQExpBuffer(delqry, "DROP PROCEDURAL LANGUAGE %s;\n",
qlanname);
if (useParams)
--- 8933,8940 ----
else
lanschema = NULL;
! appendPQExpBuffer(delqry, "DROP PROCEDURAL LANGUAGE %s%s;\n",
! conditional_drops ? "IF EXISTS " : "",
qlanname);
if (useParams)
***************
*** 9461,9467 **** dumpFunc(Archive *fout, FuncInfo *finfo)
/*
* 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);
--- 9475,9482 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delqry, "DROP FUNCTION %s%s.%s;\n",
! conditional_drops ? "IF EXISTS " : "",
fmtId(finfo->dobj.namespace->dobj.name),
funcsig);
***************
*** 9679,9685 **** dumpCast(Archive *fout, CastInfo *cast)
delqry = createPQExpBuffer();
labelq = createPQExpBuffer();
! appendPQExpBuffer(delqry, "DROP CAST (%s AS %s);\n",
getFormattedTypeName(fout, cast->castsource, zeroAsNone),
getFormattedTypeName(fout, cast->casttarget, zeroAsNone));
--- 9694,9701 ----
delqry = createPQExpBuffer();
labelq = createPQExpBuffer();
! appendPQExpBuffer(delqry, "DROP CAST %s(%s AS %s);\n",
! conditional_drops ? "IF EXISTS " : "",
getFormattedTypeName(fout, cast->castsource, zeroAsNone),
getFormattedTypeName(fout, cast->casttarget, zeroAsNone));
***************
*** 9949,9955 **** dumpOpr(Archive *fout, OprInfo *oprinfo)
/*
* 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);
--- 9965,9972 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP OPERATOR %s%s.%s;\n",
! conditional_drops ? "IF EXISTS " : "",
fmtId(oprinfo->dobj.namespace->dobj.name),
oprid->data);
***************
*** 10235,10241 **** dumpOpclass(Archive *fout, OpclassInfo *opcinfo)
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP OPERATOR CLASS %s",
fmtId(opcinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s",
fmtId(opcinfo->dobj.name));
--- 10252,10259 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP OPERATOR CLASS %s%s",
! conditional_drops ? "IF EXISTS " : "",
fmtId(opcinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s",
fmtId(opcinfo->dobj.name));
***************
*** 10679,10685 **** dumpOpfamily(Archive *fout, OpfamilyInfo *opfinfo)
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP OPERATOR FAMILY %s",
fmtId(opfinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s",
fmtId(opfinfo->dobj.name));
--- 10697,10704 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP OPERATOR FAMILY %s%s",
! conditional_drops ? "IF EXISTS " : "",
fmtId(opfinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s",
fmtId(opfinfo->dobj.name));
***************
*** 10853,10859 **** dumpCollation(Archive *fout, CollInfo *collinfo)
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP COLLATION %s",
fmtId(collinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s;\n",
fmtId(collinfo->dobj.name));
--- 10872,10879 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP COLLATION %s%s",
! conditional_drops ? "IF EXISTS " : "",
fmtId(collinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s;\n",
fmtId(collinfo->dobj.name));
***************
*** 10950,10956 **** dumpConversion(Archive *fout, ConvInfo *convinfo)
/*
* 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));
--- 10970,10977 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP CONVERSION %s%s",
! conditional_drops ? "IF EXISTS " : "",
fmtId(convinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s;\n",
fmtId(convinfo->dobj.name));
***************
*** 11194,11200 **** dumpAgg(Archive *fout, AggInfo *agginfo)
/*
* 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);
--- 11215,11222 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP AGGREGATE %s%s.%s;\n",
! conditional_drops ? "IF EXISTS " : "",
fmtId(agginfo->aggfn.dobj.namespace->dobj.name),
aggsig);
***************
*** 11293,11299 **** dumpTSParser(Archive *fout, TSParserInfo *prsinfo)
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP TEXT SEARCH PARSER %s",
fmtId(prsinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s;\n",
fmtId(prsinfo->dobj.name));
--- 11315,11322 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP TEXT SEARCH PARSER %s%s",
! conditional_drops ? "IF EXISTS " : "",
fmtId(prsinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s;\n",
fmtId(prsinfo->dobj.name));
***************
*** 11380,11386 **** dumpTSDictionary(Archive *fout, TSDictInfo *dictinfo)
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP TEXT SEARCH DICTIONARY %s",
fmtId(dictinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s;\n",
fmtId(dictinfo->dobj.name));
--- 11403,11410 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP TEXT SEARCH DICTIONARY %s%s",
! conditional_drops ? "IF EXISTS " : "",
fmtId(dictinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s;\n",
fmtId(dictinfo->dobj.name));
***************
*** 11446,11452 **** dumpTSTemplate(Archive *fout, TSTemplateInfo *tmplinfo)
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP TEXT SEARCH TEMPLATE %s",
fmtId(tmplinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s;\n",
fmtId(tmplinfo->dobj.name));
--- 11470,11477 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP TEXT SEARCH TEMPLATE %s%s",
! conditional_drops ? "IF EXISTS " : "",
fmtId(tmplinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s;\n",
fmtId(tmplinfo->dobj.name));
***************
*** 11574,11580 **** dumpTSConfig(Archive *fout, TSConfigInfo *cfginfo)
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP TEXT SEARCH CONFIGURATION %s",
fmtId(cfginfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s;\n",
fmtId(cfginfo->dobj.name));
--- 11599,11606 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "DROP TEXT SEARCH CONFIGURATION %s%s",
! conditional_drops ? "IF EXISTS " : "",
fmtId(cfginfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, ".%s;\n",
fmtId(cfginfo->dobj.name));
***************
*** 11650,11656 **** dumpForeignDataWrapper(Archive *fout, FdwInfo *fdwinfo)
appendPQExpBuffer(q, ";\n");
! appendPQExpBuffer(delq, "DROP FOREIGN DATA WRAPPER %s;\n",
qfdwname);
appendPQExpBuffer(labelq, "FOREIGN DATA WRAPPER %s",
--- 11676,11683 ----
appendPQExpBuffer(q, ";\n");
! appendPQExpBuffer(delq, "DROP FOREIGN DATA WRAPPER %s%s;\n",
! conditional_drops ? "IF EXISTS " : "",
qfdwname);
appendPQExpBuffer(labelq, "FOREIGN DATA WRAPPER %s",
***************
*** 11743,11749 **** dumpForeignServer(Archive *fout, ForeignServerInfo *srvinfo)
appendPQExpBuffer(q, ";\n");
! appendPQExpBuffer(delq, "DROP SERVER %s;\n",
qsrvname);
appendPQExpBuffer(labelq, "SERVER %s", qsrvname);
--- 11770,11777 ----
appendPQExpBuffer(q, ";\n");
! appendPQExpBuffer(delq, "DROP SERVER %s%s;\n",
! conditional_drops ? "IF EXISTS " : "",
qsrvname);
appendPQExpBuffer(labelq, "SERVER %s", qsrvname);
***************
*** 11861,11867 **** dumpUserMappings(Archive *fout,
appendPQExpBuffer(q, ";\n");
resetPQExpBuffer(delq);
! appendPQExpBuffer(delq, "DROP USER MAPPING FOR %s", fmtId(usename));
appendPQExpBuffer(delq, " SERVER %s;\n", fmtId(servername));
resetPQExpBuffer(tag);
--- 11889,11897 ----
appendPQExpBuffer(q, ";\n");
resetPQExpBuffer(delq);
! appendPQExpBuffer(delq, "DROP USER MAPPING %sFOR %s",
! conditional_drops ? "IF EXISTS " : "",
! fmtId(usename));
appendPQExpBuffer(delq, " SERVER %s;\n", fmtId(servername));
resetPQExpBuffer(tag);
***************
*** 12448,12454 **** dumpTableSchema(Archive *fout, TableInfo *tbinfo)
* 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));
--- 12478,12485 ----
* DROP must be fully qualified in case same name appears in
* pg_catalog
*/
! appendPQExpBuffer(delq, "DROP VIEW %s%s.",
! conditional_drops ? "IF EXISTS " : "",
fmtId(tbinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s;\n",
fmtId(tbinfo->dobj.name));
***************
*** 12510,12516 **** dumpTableSchema(Archive *fout, TableInfo *tbinfo)
* DROP must be fully qualified in case same name appears in
* pg_catalog
*/
! appendPQExpBuffer(delq, "DROP %s %s.", reltypename,
fmtId(tbinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s;\n",
fmtId(tbinfo->dobj.name));
--- 12541,12548 ----
* DROP must be fully qualified in case same name appears in
* pg_catalog
*/
! appendPQExpBuffer(delq, "DROP %s %s%s.", reltypename,
! conditional_drops ? "IF EXISTS " : "",
fmtId(tbinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s;\n",
fmtId(tbinfo->dobj.name));
***************
*** 13002,13008 **** dumpAttrDef(Archive *fout, AttrDefInfo *adinfo)
/*
* 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));
--- 13034,13041 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delq, "ALTER TABLE %s%s.",
! conditional_drops ? "IF EXISTS " : "",
fmtId(tbinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s ",
fmtId(tbinfo->dobj.name));
***************
*** 13106,13112 **** dumpIndex(Archive *fout, IndxInfo *indxinfo)
* 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));
--- 13139,13146 ----
* DROP must be fully qualified in case same name appears in
* pg_catalog
*/
! appendPQExpBuffer(delq, "DROP INDEX %s%s.",
! conditional_drops ? "IF EXISTS " : "",
fmtId(tbinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s;\n",
fmtId(indxinfo->dobj.name));
***************
*** 13225,13231 **** dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
* 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));
--- 13259,13266 ----
* DROP must be fully qualified in case same name appears in
* pg_catalog
*/
! appendPQExpBuffer(delq, "ALTER TABLE %sONLY %s.",
! conditional_drops ? "IF EXISTS " : "",
fmtId(tbinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s ",
fmtId(tbinfo->dobj.name));
***************
*** 13258,13264 **** dumpConstraint(Archive *fout, ConstraintInfo *coninfo)
* 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));
--- 13293,13300 ----
* DROP must be fully qualified in case same name appears in
* pg_catalog
*/
! appendPQExpBuffer(delq, "ALTER TABLE %sONLY %s.",
! conditional_drops ? "IF EXISTS " : "",
fmtId(tbinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delq, "%s ",
fmtId(tbinfo->dobj.name));
***************
*** 13527,13533 **** dumpSequence(Archive *fout, TableInfo *tbinfo)
/*
* 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));
--- 13563,13570 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delqry, "DROP SEQUENCE %s%s.",
! conditional_drops ? "IF EXISTS " : "",
fmtId(tbinfo->dobj.namespace->dobj.name));
appendPQExpBuffer(delqry, "%s;\n",
fmtId(tbinfo->dobj.name));
***************
*** 13715,13721 **** dumpTrigger(Archive *fout, TriggerInfo *tginfo)
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delqry, "DROP TRIGGER %s ",
fmtId(tginfo->dobj.name));
appendPQExpBuffer(delqry, "ON %s.",
fmtId(tbinfo->dobj.namespace->dobj.name));
--- 13752,13759 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delqry, "DROP TRIGGER %s%s ",
! conditional_drops ? "IF EXISTS " : "",
fmtId(tginfo->dobj.name));
appendPQExpBuffer(delqry, "ON %s.",
fmtId(tbinfo->dobj.namespace->dobj.name));
***************
*** 14055,14061 **** dumpRule(Archive *fout, RuleInfo *rinfo)
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delcmd, "DROP RULE %s ",
fmtId(rinfo->dobj.name));
appendPQExpBuffer(delcmd, "ON %s.",
fmtId(tbinfo->dobj.namespace->dobj.name));
--- 14093,14100 ----
/*
* DROP must be fully qualified in case same name appears in pg_catalog
*/
! appendPQExpBuffer(delcmd, "DROP RULE %s%s ",
! conditional_drops ? "IF EXISTS " : "",
fmtId(rinfo->dobj.name));
appendPQExpBuffer(delcmd, "ON %s.",
fmtId(tbinfo->dobj.namespace->dobj.name));
*** a/src/bin/pg_dump/pg_dumpall.c
--- b/src/bin/pg_dump/pg_dumpall.c
***************
*** 67,72 **** static bool verbose = false;
--- 67,73 ----
static int binary_upgrade = 0;
static int column_inserts = 0;
+ static int conditional_drops = 0;
static int disable_dollar_quoting = 0;
static int disable_triggers = 0;
static int inserts = 0;
***************
*** 111,116 **** main(int argc, char *argv[])
--- 112,118 ----
{"attribute-inserts", no_argument, &column_inserts, 1},
{"binary-upgrade", no_argument, &binary_upgrade, 1},
{"column-inserts", no_argument, &column_inserts, 1},
+ {"conditional-drops", no_argument, &conditional_drops, 1},
{"disable-dollar-quoting", no_argument, &disable_dollar_quoting, 1},
{"disable-triggers", no_argument, &disable_triggers, 1},
{"inserts", no_argument, &inserts, 1},
***************
*** 344,349 **** main(int argc, char *argv[])
--- 346,353 ----
appendPQExpBuffer(pgdumpopts, " --binary-upgrade");
if (column_inserts)
appendPQExpBuffer(pgdumpopts, " --column-inserts");
+ if (conditional_drops)
+ appendPQExpBuffer(pgdumpopts, " --conditional-drops");
if (disable_dollar_quoting)
appendPQExpBuffer(pgdumpopts, " --disable-dollar-quoting");
if (disable_triggers)
***************
*** 555,560 **** help(void)
--- 559,565 ----
printf(_(" -x, --no-privileges do not dump privileges (grant/revoke)\n"));
printf(_(" --binary-upgrade for use by upgrade utilities only\n"));
printf(_(" --column-inserts dump data as INSERT commands with column names\n"));
+ printf(_(" --conditional-drops use conditional drops command for cleaning\n"));
printf(_(" --disable-dollar-quoting disable dollar quoting, use SQL standard quoting\n"));
printf(_(" --disable-triggers disable triggers during data-only restore\n"));
printf(_(" --inserts dump data as INSERT commands, rather than COPY\n"));