diff options
Diffstat (limited to 'src/bin/pg_dump/common.c')
-rw-r--r-- | src/bin/pg_dump/common.c | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c index cc0db663200..8c4270ca1d7 100644 --- a/src/bin/pg_dump/common.c +++ b/src/bin/pg_dump/common.c @@ -79,12 +79,12 @@ TableInfo * getSchemaData(int *numTablesPtr) { NamespaceInfo *nsinfo; + ExtensionInfo *extinfo; AggInfo *agginfo; InhInfo *inhinfo; RuleInfo *ruleinfo; ProcLangInfo *proclanginfo; CastInfo *castinfo; - ExtensionInfo *extinfo; OpclassInfo *opcinfo; OpfamilyInfo *opfinfo; ConvInfo *convinfo; @@ -96,12 +96,12 @@ getSchemaData(int *numTablesPtr) ForeignServerInfo *srvinfo; DefaultACLInfo *daclinfo; int numNamespaces; + int numExtensions; int numAggregates; int numInherits; int numRules; int numProcLangs; int numCasts; - int numExtensions; int numOpclasses; int numOpfamilies; int numConversions; @@ -118,6 +118,10 @@ getSchemaData(int *numTablesPtr) nsinfo = getNamespaces(&numNamespaces); if (g_verbose) + write_msg(NULL, "reading extensions\n"); + extinfo = getExtensions(&numExtensions); + + if (g_verbose) write_msg(NULL, "reading user-defined functions\n"); funinfo = getFuncs(&numFuncs); funinfoindex = buildIndexArray(funinfo, numFuncs, sizeof(FuncInfo)); @@ -147,6 +151,10 @@ getSchemaData(int *numTablesPtr) opcinfo = getOpclasses(&numOpclasses); if (g_verbose) + write_msg(NULL, "reading user-defined operator families\n"); + opfinfo = getOpfamilies(&numOpfamilies); + + if (g_verbose) write_msg(NULL, "reading user-defined text search parsers\n"); prsinfo = getTSParsers(&numTSParsers); @@ -175,14 +183,14 @@ getSchemaData(int *numTablesPtr) daclinfo = getDefaultACLs(&numDefaultACLs); if (g_verbose) - write_msg(NULL, "reading user-defined operator families\n"); - opfinfo = getOpfamilies(&numOpfamilies); - - if (g_verbose) write_msg(NULL, "reading user-defined conversions\n"); convinfo = getConversions(&numConversions); if (g_verbose) + write_msg(NULL, "reading type casts\n"); + castinfo = getCasts(&numCasts); + + if (g_verbose) write_msg(NULL, "reading user-defined tables\n"); tblinfo = getTables(&numTables); tblinfoindex = buildIndexArray(tblinfo, numTables, sizeof(TableInfo)); @@ -195,14 +203,14 @@ getSchemaData(int *numTablesPtr) write_msg(NULL, "reading rewrite rules\n"); ruleinfo = getRules(&numRules); + /* + * Identify extension member objects and mark them as not to be dumped. + * This must happen after reading all objects that can be direct members + * of extensions, but before we begin to process table subsidiary objects. + */ if (g_verbose) - write_msg(NULL, "reading type casts\n"); - castinfo = getCasts(&numCasts); - - /* this must be after getTables */ - if (g_verbose) - write_msg(NULL, "reading extensions\n"); - extinfo = getExtensions(&numExtensions); + write_msg(NULL, "finding extension members\n"); + getExtensionMembership(extinfo, numExtensions); /* Link tables to parents, mark parents of target tables interesting */ if (g_verbose) @@ -525,9 +533,9 @@ findObjectByDumpId(DumpId dumpId) * Returns NULL for unknown ID * * We use binary search in a sorted list that is built on first call. - * If AssignDumpId() and findObjectByCatalogId() calls were intermixed, + * If AssignDumpId() and findObjectByCatalogId() calls were freely intermixed, * the code would work, but possibly be very slow. In the current usage - * pattern that does not happen, indeed we only need to build the list once. + * pattern that does not happen, indeed we build the list at most twice. */ DumpableObject * findObjectByCatalogId(CatalogId catalogId) |