Thread: Planner question

Planner question

From
Tom Raney
Date:
I've been working on a client application (based on the Red Hat Visual 
Explain tool) to display all plans the planner considers graphically and 
it does that.  But, the trace functionality in the planner is always on 
(and thus, taking up cycles and resources) whether or not it is 
requested by the user. 

My question is:  How would I let the planner know when a planner session 
has been invoked by the "explain" command?  If I can slip a flag into 
PlannerInfo or PlannerGlobal, that would be perfect.  But, I'm a bit 
stuck on how to get explain context to that point.  I don't want to 
modify the planner() entry function parameter list, unless absolutely 
necessary. 

I currently compile with DEBUG_OPTIMIZER - and that is one option - to 
conditionally compile this functionality, but it would be great if this 
could run on a lean production system.

-Tom Raney





Re: Planner question

From
Tom Lane
Date:
Tom Raney <raneyt@cecs.pdx.edu> writes:
> My question is:  How would I let the planner know when a planner session 
> has been invoked by the "explain" command?  If I can slip a flag into 
> PlannerInfo or PlannerGlobal, that would be perfect.  But, I'm a bit 
> stuck on how to get explain context to that point.  I don't want to 
> modify the planner() entry function parameter list, unless absolutely 
> necessary. 

Slip another flag bit into cursorOptions, perhaps?  There's certainly
lots of room there.

Not that planner() is called from so many places that adding another
parameter would be out of the question.  ISTM you'd have to do something
nearly as invasive to add the downstream flag to PlannerGlobal anyway,
because the only people that are likely to be seriously affected by a
change in planner()'s API would be people plugging into planner_hook,
and they'd be affected by PlannerGlobal changes too.
        regards, tom lane