Time Difference Between actual total time and execution time in EXPLAIN ANALYZE
The source of EXPLAIN has:

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

    if (es-&gt;summary &amp;&amp; planduration)
    {
            double          plantime = INSTR_TIME_GET_DOUBLE(*planduration);

            ExplainPropertyFloat("Planning Time", "ms", 1000.0 * plantime, 3, es);
    }

    ...

    /*
     * Close down the query and free resources.  Include time for this in the
     * total execution time (although it should be pretty minimal).
     */
    INSTR_TIME_SET_CURRENT(starttime);

    ExecutorEnd(queryDesc);

    FreeQueryDesc(queryDesc);

    PopActiveSnapshot();

    /* We need a CCI just in case query expanded to multiple plans */
    if (es-&gt;analyze)
            CommandCounterIncrement();

    totaltime += elapsed_time(&amp;starttime);

    /*
     * We only report execution time if we actually ran the query (that is,
     * the user specified ANALYZE), and if summary reporting is enabled (the
     * user can set SUMMARY OFF to not have the timing information included in
     * the output).  By default, ANALYZE sets SUMMARY to true.
     */
    if (es-&gt;summary &amp;&amp; es-&gt;analyze)
            ExplainPropertyFloat("Execution Time", "ms", 1000.0 * totaltime, 3,
                                                     es);


Perhaps freeing of the query resources (tearing down the executor infrastructure, freeing the snapshot) takes an inordinate time. Hard to say.

Is that a one-time occurrence or do you see that result consistently?

If the latter, is there anything unusual about this query?