On Mon, Mar 30, 2015 at 8:11 PM, Robert Haas <robertmh...@gmail.com> wrote: > > On Fri, Mar 27, 2015 at 2:34 AM, Amit Kapila <amit.kapil...@gmail.com> wrote: > > The reason of this problem is that above tab-completion is executing > > query [1] which contains subplan for the funnel node and currently > > we don't have capability (enough infrastructure) to support execution > > of subplans by parallel workers. Here one might wonder why we > > have choosen Parallel Plan (Funnel node) for such a case and the > > reason for same is that subplans are attached after Plan generation > > (SS_finalize_plan()) and if want to discard such a plan, it will be > > much more costly, tedious and not worth the effort as we have to > > eventually make such a plan work. > > > > Here we have two choices to proceed, first one is to support execution > > of subplans by parallel workers and second is execute/scan locally for > > Funnel node having subplan (don't launch workers). > > It looks to me like the is an InitPlan, not a subplan. There > shouldn't be any problem with a Funnel node having an InitPlan; it > looks to me like all of the InitPlan stuff is handled by common code > within the executor (grep for initPlan), so it ought to work here the > same as it does for anything else. What I suspect is failing > (although you aren't being very clear about it here) is the passing > down of the parameters set by the InitPlan to the workers.
It is failing because we are not passing InitPlan itself (InitPlan is nothing but a list of SubPlan) and I tried tried to describe in previous mail [1] what we need to do to achieve the same, but in short, it is not difficult to pass down the required parameters (like plan->InitPlan or plannedstmt->subplans), rather the main missing part is the handling of such parameters in worker side (mainly we need to provide support for all plan nodes which can be passed as part of InitPlan in readfuncs.c). I am not against supporting InitPlan's on worker side, but just wanted to say that if possible why not leave that for first version. [1] I have tried to evaluate what it would take us to support execution of subplans by parallel workers. We need to pass the sub plans stored in Funnel Node (initPlan) and corresponding subplans stored in planned statement (subplans) as subplan's stored in Funnel node has reference to subplans in planned statement. Next currently readfuncs.c (functions to read different type of nodes) doesn't support reading any type of plan node, so we need to add support for reading all kind of plan nodes (as subplan can have any type of plan node) and similarly to execute any type of Plan node, we might need more work (infrastructure). With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com