On Mon, Sep 25, 2023 at 03:18:13AM +0000, fujii.y...@df.mitsubishielectric.co.jp wrote: > Hi Mr.Bruce, Mr.Pyhalov, Mr.Finnerty, hackers. > > Thank you for your valuable comments. I sincerely apologize for the very late > reply. > Here is a response to your comments or a fix to the patch. > > Tuesday, August 8, 2023 at 3:31 Bruce Momjian > > > I have modified the program except for the point "if the version of the > > > remote server is less than PG17". > > > Instead, we have addressed the following. > > > "If check_partial_aggregate_support is true and the remote server version > > > is older than the local server > > > version, postgres_fdw does not assume that the partial aggregate function > > > is on the remote server unless > > > the partial aggregate function and the aggregate function match." > > > The reason for this is to maintain compatibility with any aggregate > > > function that does not support partial > > > aggregate in one version of V1 (V1 is PG17 or higher), even if the next > > > version supports partial aggregate. > > > For example, string_agg does not support partial aggregation in PG15, but > > > it will support partial aggregation > > > in PG16. > > > > Just to clarify, I think you are saying: > > > > If check_partial_aggregate_support is true and the remote server > > version is older than the local server version, postgres_fdw > > checks if the partial aggregate function exists on the remote > > server during planning and only uses it if it does. > > > > I tried to phrase it in a positive way, and mentioned the plan time > > distinction. Also, I am sorry I was away for most of July and am just > > getting to this. > Thanks for your comment. In the documentation, the description of > check_partial_aggregate_support is as follows > (please see postgres-fdw.sgml). > -- > check_partial_aggregate_support (boolean) > Only if this option is true, during query planning, postgres_fdw connects to > the remote server and check if the remote server version is older than the > local server version. If so, postgres_fdw assumes that for each built-in > aggregate function, the partial aggregate function is not defined on the > remote server unless the partial aggregate function and the aggregate > function match. The default is false. > --
My point is that there are three behaviors: * false - no check * true, remote version >= sender - no check * true, remove version < sender - check Here is your code: + * Check that a buit-in aggpartialfunc exists on the remote server. If + * check_partial_aggregate_support is false, we assume the partial aggregate + * function exsits on the remote server. Otherwise we assume the partial + * aggregate function exsits on the remote server only if the remote server + * version is not less than the local server version. + */ +static bool +is_builtin_aggpartialfunc_shippable(Oid aggpartialfn, PgFdwRelationInfo *fpinfo) +{ + bool shippable = true; + + if (fpinfo->check_partial_aggregate_support) + { + if (fpinfo->remoteversion == 0) + { + PGconn *conn = GetConnection(fpinfo->user, false, NULL); + + fpinfo->remoteversion = PQserverVersion(conn); + } + if (fpinfo->remoteversion < PG_VERSION_NUM) + shippable = false; + } + return shippable; +} I think this needs to be explained in the docs. I am ready to adjust the patch to improve the wording whenever you are ready. Should I do it now and post an updated version for you to use? -- Bruce Momjian <br...@momjian.us> https://momjian.us EDB https://enterprisedb.com Only you can decide what is important to you.