This is an automated email from the ASF dual-hosted git repository. Smyatkin-Maxim pushed a commit to branch pg-dump-rebase-REL-2 in repository https://gitbox.apache.org/repos/asf/cloudberry.git
commit d4a1d39b2eee14a6344a8731b282d5ba4deae354 Author: Brent Doil <[email protected]> AuthorDate: Fri Jan 5 19:55:41 2024 -0500 Fix dumping funcs/aggs with --function-oids flag. Commit 992b4dd fixes a pg_dump regression when using --function-oid where functions were incorrectly being marked to not dump. However, this fix revealed a second pg_dump regression with selectDumpableFunction which was being masked by the first regression. selectDumpableFunction now needed updating to work with the new method of dumping that uses bit masking that was backported in github.com/greenplum-db/gpdb/commits/07a3ffef6422275f76818d9c445c31495460889a. It also needed updating to work with function dumping when extensions are involved. selectDumpableAggregate was created so aggregate dumping works as intended when using --function-oid on an aggregate function. This is necessary because pg_dump treats aggregates separately from functions. See the comment in getFuncs for details. --- src/bin/pg_dump/pg_dump.c | 43 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index e1b926abae7..7191aab2d4f 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -2153,20 +2153,49 @@ 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; * else, always dump the function. */ - if (function_include_oids.head != NULL) - finfo->dobj.dump = simple_oid_list_member(&function_include_oids, - finfo->dobj.catId.oid); + if (function_include_oids.head != NULL && + simple_oid_list_member(&function_include_oids, finfo->dobj.catId.oid)) + finfo->dobj.dump = DUMP_COMPONENT_ALL; else if (finfo->dobj.namespace) finfo->dobj.dump = finfo->dobj.namespace->dobj.dump; else - finfo->dobj.dump = true; + finfo->dobj.dump = DUMP_COMPONENT_ALL; +} + +/* + * selectDumpableAggregate: policy-setting subroutine + * Mark a function as to be dumped or not + */ +static void +selectDumpableAggregate(AggInfo *agginfo, Archive *fout) +{ + + if (checkExtensionMembership(&agginfo->aggfn.dobj, fout)) + return; /* extension membership overrides all else */ + + /* + * If specific aggregates are being dumped, dump just those aggregates; else, dump + * according to the parent namespace's dump flag if parent namespace is not null; + * else, always dump the function. + */ + if (function_include_oids.head != NULL && + simple_oid_list_member(&function_include_oids, agginfo->aggfn.dobj.catId.oid)) + agginfo->aggfn.dobj.dump = DUMP_COMPONENT_ALL; + else if (agginfo->aggfn.dobj.namespace) + agginfo->aggfn.dobj.dump = agginfo->aggfn.dobj.namespace->dobj.dump; + else + agginfo->aggfn.dobj.dump = DUMP_COMPONENT_ALL; } /* @@ -6663,7 +6692,7 @@ getAggregates(Archive *fout, int *numAggs) } /* Decide whether we want to dump it */ - selectDumpableObject(&(agginfo[i].aggfn.dobj), fout); + selectDumpableAggregate(&(agginfo[i]), fout); /* Mark whether aggregate has an ACL */ if (!PQgetisnull(res, i, i_aggacl)) @@ -6996,7 +7025,7 @@ getFuncs(Archive *fout, int *numFuncs) } /* Decide whether we want to dump it */ - selectDumpableFunction(&finfo[i]); + selectDumpableFunction(&finfo[i], fout); /* Mark whether function has an ACL */ if (!PQgetisnull(res, i, i_proacl)) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
