> -----Original Message----- > From: pgsql-hackers-ow...@postgresql.org > [mailto:pgsql-hackers-ow...@postgresql.org] On Behalf Of Kouhei Kaigai > Sent: Saturday, March 19, 2016 8:57 AM > To: Tom Lane > Cc: Robert Haas; Petr Jelinek; David Rowley; email@example.com > Subject: Re: [HACKERS] WIP: Upper planner pathification > > > -----Original Message----- > > From: pgsql-hackers-ow...@postgresql.org > > [mailto:pgsql-hackers-ow...@postgresql.org] On Behalf Of Tom Lane > > Sent: Friday, March 18, 2016 11:44 PM > > To: Kaigai Kouhei(海外 浩平) > > Cc: Robert Haas; Petr Jelinek; David Rowley; firstname.lastname@example.org > > Subject: Re: [HACKERS] WIP: Upper planner pathification > > > > Kouhei Kaigai <kai...@ak.jp.nec.com> writes: > > > On Wed, Mar 16, 2016 at 2:47 PM, Tom Lane <t...@sss.pgh.pa.us> wrote: > > >> I do not, however, like the proposal to expose wflists and so forth. > > >> Those are internal data structures in grouping_planner and I absolutely > > >> refuse to promise that they're going to stay stable. > > > > > Hmm... It's not easy to imagine a case that extension wants own idea > > > to extract window functions from the target list and select active > > > windows, even if extension wants to have own executor and own cost > > > estimation logic. > > > In case when extension tries to add WindowPath + CustomPath(Sort), > > > extension is interested in alternative sort task, but not window > > > function itself. It is natural to follow the built-in implementation, > > > thus, it motivates extension author to take copy & paste the code. > > > select_active_windows() is static, so extension needs to have same > > > routine on their side. > > > > Well, to be perfectly blunt about it, I have said from day one that this > > notion that a CustomScan extension will be able to cause arbitrary planner > > behavior changes is loony. We are simply not going to drop a hook into > > every tenth line of the planner for you, nor de-static-ify every internal > > function, nor (almost equivalently) expose the data structures those > > functions produce, because it would cripple core planner development to > > try to keep the implied APIs stable. And I continue to maintain that any > > actually-generally-useful ideas would be better handled by submitting them > > as patches to the core planner, rather than trying to implement them in an > > arms-length extension. > > > > In the case at hand, I notice that the WindowFuncLists struct is > > actually from find_window_functions in clauses.c, so an extension > > that needed to get hold of that would be unlikely to do any copying > > and pasting anyhow -- it'd just call find_window_functions again. > > (That only needs to search the targetlist, so it's not that expensive.) > > The other lists you mention are all tightly tied to specific, and not > > terribly well-designed, implementation strategies for grouping sets and > > window functions. Those are *very* likely to change in the near future; > > and even if they don't, I'm skeptical that an external implementor of > > grouping sets or window functions would want to use exactly those same > > implementation strategies. Maybe the only reason you're there at all > > is you want to be smarter about the order of doing window functions, > > for example. > > > > So I really don't want to export any of that stuff. > > > Hmm. I could understand we have active development around this area > thus miscellaneous internal data structure may not be enough stable > to expose the extension. > Don't you deny recall the discussion once implementation gets calmed > down on the future development cycle? > > > As for other details of the proposed patch, I was intending to put > > all the hook calls into grouping_planner for consistency, rather than > > scattering them between grouping_planner and its subroutines. So that > > would probably mean calling the hook for a given step *before* we > > generate the core paths for that step, not after. Did you have a > > reason to want the other order? (If you say "so the hook can look > > at the core-made paths", I'm going to say "that's a bad idea". It'd > > further increase the coupling between a CustomScan extension and core.) > > > No deep reason. I just followed the manner in scan/join path hook; that > calls extension once the core feature adds built-in path nodes. > Ah, I oversight a deep reason. ForeignScan/CustomScan may have an alternative execution path if extension supports corner case handling for a case when these node cannot execute or can execute but unreasonable cost actually, on execution time, even if planner thought the path is most reasonable on optimization time.
One example at scan/join was EPQ rechecks. Remote join invocation was not reasonable for each EPQ recheck, thus, ForeignPath had fdw_outerpath field to pick up a core-made path. I can expect some other similar cases. For example, a custom-scan that support multi-node aggregation wants to switch to built-in aggregation if network would be unreachable to other node. For example, a custom-scan that support GPU sorting wants to switch to built-in sorting if available GPU RAM would be less than requirement on execution time. ...and so on. > (If you say "so the hook can look at the core-made paths", > I'm going to say "that's a bad idea". > I assume that you are saying it is a bad idea to reference the core-made path to construct foreign/custom-scan path itself. However, what I'm saying here is a case when extension wants to pick up a core-made cheapest path as a part of fdw_outerpath or custom_paths. Thanks, -- NEC Business Creation Division / PG-Strom Project KaiGai Kohei <kai...@ak.jp.nec.com> -- Sent via pgsql-hackers mailing list (email@example.com) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers