postgres.git / summary / log / commit / refs

commit    82b495cdd7ec1e7bfcfa497ce2138d3ce5a8fa43
Author:   Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date:     Wed Feb 11 16:50:57 2026 +0000

    Fix pg_stat_get_backend_wait_event() for aux processes
    
    The pg_stat_activity view shows information for aux processes, but the
    pg_stat_get_backend_wait_event() and
    pg_stat_get_backend_wait_event_type() functions did not. To fix, call
    AuxiliaryPidGetProc(pid) if BackendPidGetProc(pid) returns NULL, like
    we do in pg_stat_get_activity().
    
    In version 17 and above, it's a little silly to use those functions
    when we already have the ProcNumber at hand, but it was necessary
    before v17 because the backend ID was different from ProcNumber. I
    have other plans for wait_event_info on master, so it doesn't seem
    worth applying a different fix on different versions now.
    
    Reviewed-by: Sami Imseih <samimseih@gmail.com>
    Reviewed-by: Chao Li <li.evan.chao@gmail.com>
    Reviewed-by: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
    Discussion: https://www.postgresql.org/message-id/c0320e04-6e85-4c49-80c5-27cfb3a58108@iki.fi
    Backpatch-through: 14


src/backend/utils/adt/pgstatfuncs.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 4125c2b0331..e79b54775bb 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -1046,8 +1046,14 @@ pg_stat_get_backend_wait_event_type(PG_FUNCTION_ARGS) wait_event_type = "<backend information not available>"; else if (!HAS_PGSTAT_PERMISSIONS(beentry->st_userid)) wait_event_type = "<insufficient privilege>"; - else if ((proc = BackendPidGetProc(beentry->st_procpid)) != NULL) - wait_event_type = pgstat_get_wait_event_type(proc->wait_event_info); + else + { + proc = BackendPidGetProc(beentry->st_procpid); + if (!proc) + proc = AuxiliaryPidGetProc(beentry->st_procpid); + if (proc) + wait_event_type = pgstat_get_wait_event_type(proc->wait_event_info); + } if (!wait_event_type) PG_RETURN_NULL(); @@ -1067,8 +1073,14 @@ pg_stat_get_backend_wait_event(PG_FUNCTION_ARGS) wait_event = "<backend information not available>"; else if (!HAS_PGSTAT_PERMISSIONS(beentry->st_userid)) wait_event = "<insufficient privilege>"; - else if ((proc = BackendPidGetProc(beentry->st_procpid)) != NULL) - wait_event = pgstat_get_wait_event(proc->wait_event_info); + else + { + proc = BackendPidGetProc(beentry->st_procpid); + if (!proc) + proc = AuxiliaryPidGetProc(beentry->st_procpid); + if (proc) + wait_event = pgstat_get_wait_event(proc->wait_event_info); + } if (!wait_event) PG_RETURN_NULL(); [parent: ec9f0cbe018a]