Hi,

There's a few cases where by the time ExecutorFinish() is called,
ExecShutdownNode() has not yet been called.  As, among other reasons,
ExecShutdownNode() also collects instrumentation, I think that's
problematic.

In ExplainOnePlan() we call

                /* run cleanup too */
                ExecutorFinish(queryDesc);

and then print the majority of the explain data:

        /* Create textual dump of plan tree */
        ExplainPrintPlan(es, queryDesc);

and only then shut down the entire query:

        ExecutorEnd(queryDesc);

which seems to mean that if a node hasn't yet been shut down for some
reason, we'll not have information that's normally collected in
ExecShutdownNode().

ISTM, we should have a new EState member that runs ExecShutdownNode() if
in standard_ExecutorEnd() if not already done.

Am I missing something?

Greetings,

Andres Freund

Reply via email to