diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index b024acaf768..127ae5574a0 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -2191,8 +2191,11 @@ selectDumpableType(TypeInfo *tyinfo, Archive *fout) * Mark a function as to be dumped or not */ static void -selectDumpableFunction(FuncInfo *finfo) +selectDumpableFunction(FuncInfo *finfo, Archive *fout) { + if (checkExtensionMembership(&finfo->dobj, fout)) + return; /* extension membership overrides all else */ + /* * If specific functions are being dumped, dump just those functions; else, dump * according to the parent namespace's dump flag if parent namespace is not null; @@ -2200,11 +2203,12 @@ selectDumpableFunction(FuncInfo *finfo) */ if (function_include_oids.head != NULL) finfo->dobj.dump = simple_oid_list_member(&function_include_oids, - finfo->dobj.catId.oid); + finfo->dobj.catId.oid) ? + DUMP_COMPONENT_ALL : DUMP_COMPONENT_NONE; else if (finfo->dobj.namespace) - finfo->dobj.dump = finfo->dobj.namespace->dobj.dump; + finfo->dobj.dump = finfo->dobj.namespace->dobj.dump_contains; else - finfo->dobj.dump = true; + finfo->dobj.dump = DUMP_COMPONENT_ALL; } /* @@ -7299,8 +7303,7 @@ getFuncs(Archive *fout, int *numFuncs) finfo[i].postponed_def = false; /* might get set during sort */ /* Decide whether we want to dump it */ - selectDumpableFunction(&finfo[i]); - selectDumpableObject(&(finfo[i].dobj), fout); + selectDumpableFunction(&finfo[i], fout); /* Mark whether function has an ACL */ if (!PQgetisnull(res, i, i_proacl))