Re: A question about ExplainOnePlan() - Mailing list pgsql-hackers

From Tom Lane
Subject Re: A question about ExplainOnePlan()
Date
Msg-id 6807.1166025649@sss.pgh.pa.us
Whole thread Raw
In response to A question about ExplainOnePlan()  ("Gurjeet Singh" <singh.gurjeet@gmail.com>)
Responses Re: A question about ExplainOnePlan()
List pgsql-hackers
"Gurjeet Singh" <singh.gurjeet@gmail.com> writes:
>     In ExplainOnePlan(), we are calling ExecutorStart() and ExecutorEnd()
> even if we are not doing EXPLAIN ANALYZE. Whereas, ExecutorRun() is called
> only if we are ANALYZEing.

>     Can we avoid calls to Executor{Start|End}() here, or is it necessary to
> call them even for non-ANALYZE case?

No; at least not unless you want to duplicate the permission-checking
machinery inside ExecutorStart.  Otherwise EXPLAIN could be used to
obtain information about tables you're not supposed to be able to read
(for instance, the estimated number of rows matching a WHERE condition
could be sensitive information).

Also, you'd have to uglify explain.c quite a lot to be able to handle
the case of traversing a plan tree without a matching planstate tree.
        regards, tom lane


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Better management of mergejoinable operators
Next
From: "Gurjeet Singh"
Date:
Subject: Re: A question about ExplainOnePlan()