Thread

  1. Re: [PATCH] Optionally record Plan IDs to track plan changes for a query

    Michael Paquier <michael@paquier.xyz> — 2025-12-25T23:01:41Z

    On Thu, Dec 25, 2025 at 05:33:11PM +0300, Андрей Казачков wrote:
    > I’ve been testing the proposed v5 plan id work and found out instability of
    > computing the plan identifier after feeding different query texts that
    > produces the same physical plan trees but with different plan ids. The main
    > pattern regards with fields of Plan node structures that depend on positions of
    > RTEs in a RTE list.
    
    FWIW, I don't think that we have a clear agreement about what would be
    a good enough ID for plan trees, as it may be also a per-vendor
    computation that fills specific user requirements.
    
    +    /*
    +     * COMPUTE_PLAN_ID_REGRESS means COMPUTE_PLAN_ID_YES, but we don't show
    +     * the queryid in any of the EXPLAIN plans to keep stable the results
    +     * generated by regression test suites.
    +     */
    +    if (es->verbose && queryDesc->plannedstmt->planId != UINT64CONST(0) &&
    +        compute_plan_id != COMPUTE_PLAN_ID_REGRESS)
    +    {
    +        /*
    +         * Output the queryid as an int64 rather than a uint64 so we match
    +         * what would be seen in the BIGINT pg_stat_activity.plan_id column.
    +         */
    +        ExplainPropertyInteger("Plan Identifier", NULL,
    +                               queryDesc->plannedstmt->planId, es);
    +    }
    
    Now, looking at this block of code, I am wondering if you don't have a
    point here even without compute_plan_id..  Could there be merit in
    showing this information for an EXPLAIN if this field is not zero?
    With EXPLAIN being pluggable in a hook, I doubt that it matters much,
    but I am wondering if providing this information could make the work
    of some extensions easier.
    --
    Michael