diff options
author | Robert Haas <rhaas@postgresql.org> | 2016-04-20 22:47:20 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2016-04-20 23:06:06 -0400 |
commit | b4e0f183826e85fd43248d5047eddf393c3d8a30 (patch) | |
tree | 2db6036f3395bb7545c4961980243ca90e1206e8 /src | |
parent | 9c75e1a36b6b2f3ad9f76ae661f42586c92c6f7c (diff) | |
download | postgresql-b4e0f183826e85fd43248d5047eddf393c3d8a30.tar.gz postgresql-b4e0f183826e85fd43248d5047eddf393c3d8a30.zip |
Add pg_dump support for the new PARALLEL option for aggregates.
This was an oversight in commit 41ea0c23761ca108e2f08f6e3151e3cb1f9652a1.
FabrÃzio de Royes Mello, per a report from Tushar Ahuja
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/pg_dump/pg_dump.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index e1e5bee2df3..396c03d69ff 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -13274,6 +13274,7 @@ dumpAgg(Archive *fout, AggInfo *agginfo) int i_agginitval; int i_aggminitval; int i_convertok; + int i_proparallel; const char *aggtransfn; const char *aggfinalfn; const char *aggcombinefn; @@ -13295,6 +13296,7 @@ dumpAgg(Archive *fout, AggInfo *agginfo) const char *agginitval; const char *aggminitval; bool convertok; + const char *proparallel; /* Skip if not to be dumped */ if (!agginfo->aggfn.dobj.dump || dopt->dataOnly) @@ -13324,7 +13326,8 @@ dumpAgg(Archive *fout, AggInfo *agginfo) "aggmtransspace, aggminitval, " "true AS convertok, " "pg_catalog.pg_get_function_arguments(p.oid) AS funcargs, " - "pg_catalog.pg_get_function_identity_arguments(p.oid) AS funciargs " + "pg_catalog.pg_get_function_identity_arguments(p.oid) AS funciargs, " + "p.proparallel " "FROM pg_catalog.pg_aggregate a, pg_catalog.pg_proc p " "WHERE a.aggfnoid = p.oid " "AND p.oid = '%u'::pg_catalog.oid", @@ -13472,6 +13475,7 @@ dumpAgg(Archive *fout, AggInfo *agginfo) i_agginitval = PQfnumber(res, "agginitval"); i_aggminitval = PQfnumber(res, "aggminitval"); i_convertok = PQfnumber(res, "convertok"); + i_proparallel = PQfnumber(res, "proparallel"); aggtransfn = PQgetvalue(res, 0, i_aggtransfn); aggfinalfn = PQgetvalue(res, 0, i_aggfinalfn); @@ -13511,6 +13515,11 @@ dumpAgg(Archive *fout, AggInfo *agginfo) aggsig_tag = format_aggregate_signature(agginfo, fout, false); + if (i_proparallel != -1) + proparallel = PQgetvalue(res, 0, PQfnumber(res, "proparallel")); + else + proparallel = NULL; + if (!convertok) { write_msg(NULL, "WARNING: aggregate function %s could not be dumped correctly for this database version; ignored\n", @@ -13622,6 +13631,17 @@ dumpAgg(Archive *fout, AggInfo *agginfo) if (hypothetical) appendPQExpBufferStr(details, ",\n HYPOTHETICAL"); + if (proparallel != NULL && proparallel[0] != PROPARALLEL_UNSAFE) + { + if (proparallel[0] == PROPARALLEL_SAFE) + appendPQExpBufferStr(details, ",\n PARALLEL = safe"); + else if (proparallel[0] == PROPARALLEL_RESTRICTED) + appendPQExpBufferStr(details, ",\n PARALLEL = restricted"); + else if (proparallel[0] != PROPARALLEL_UNSAFE) + exit_horribly(NULL, "unrecognized proparallel value for function \"%s\"\n", + agginfo->aggfn.dobj.name); + } + /* * DROP must be fully qualified in case same name appears in pg_catalog */ |