Fix pg_stat_get_backend_wait_event() for aux processes

From: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
To: "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Fix pg_stat_get_backend_wait_event() for aux processes
Date: 2026-02-02 14:38:09
Message-ID: c0320e04-6e85-4c49-80c5-27cfb3a58108@iki.fi
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

pg_stat_get_backend_wait_event() and
pg_stat_get_backend_wait_event_type() functions don't work for aux
processes:

> postgres=# select pid, backend_type, wait_event, wait_event_type from pg_stat_activity ;
> pid | backend_type | wait_event | wait_event_type
> ---------+------------------------------+---------------------+-----------------
> 3665058 | client backend | |
> 3665051 | autovacuum launcher | AutovacuumMain | Activity
> 3665052 | logical replication launcher | LogicalLauncherMain | Activity
> 3665044 | io worker | IoWorkerMain | Activity
> 3665045 | io worker | IoWorkerMain | Activity
> 3665046 | io worker | IoWorkerMain | Activity
> 3665047 | checkpointer | CheckpointerMain | Activity
> 3665048 | background writer | BgwriterMain | Activity
> 3665050 | walwriter | WalWriterMain | Activity
> (9 rows)
>
> postgres=# SELECT pg_stat_get_backend_pid(backendid) AS pid,
> pg_stat_get_backend_wait_event_type(backendid) as wait_event_type,
> pg_stat_get_backend_wait_event(backendid) as wait_event
> FROM pg_stat_get_backend_idset() AS backendid;
> pid | wait_event_type | wait_event
> ---------+-----------------+---------------------
> 3665058 | |
> 3665051 | Activity | AutovacuumMain
> 3665052 | Activity | LogicalLauncherMain
> 3665044 | |
> 3665045 | |
> 3665046 | |
> 3665047 | |
> 3665048 | |
> 3665050 | |
> (9 rows)

We added aux processes to pg_stat_activity in commit fc70a4b0df, but
apparently forgot to do the same for those functions.

With the attached fix:

> postgres=# SELECT pg_stat_get_backend_pid(backendid) AS pid,
> pg_stat_get_backend_wait_event_type(backendid) as wait_event_type,
> pg_stat_get_backend_wait_event(backendid) as wait_event
> FROM pg_stat_get_backend_idset() AS backendid;
> pid | wait_event_type | wait_event
> ---------+-----------------+---------------------
> 3667552 | |
> 3667545 | Activity | AutovacuumMain
> 3667546 | Activity | LogicalLauncherMain
> 3667538 | Activity | IoWorkerMain
> 3667539 | Activity | IoWorkerMain
> 3667540 | Activity | IoWorkerMain
> 3667541 | Activity | CheckpointerMain
> 3667542 | Activity | BgwriterMain
> 3667544 | Activity | WalWriterMain
> (9 rows)

While looking at this, I noticed that pg_stat_activity has a
"backend_type" field, but there's no corresponding
"pg_stat_get_backend_type(backend_id)" function, similar to
"pg_stat_get_backend_wait_event(backend_id)" et al. I wonder if that was
on purpose, or we just forgot to add it when we added it to
pg_stat_activity?

Another thing I didn't do in this patch yet: I feel we should replace
BackendPidGetProc() with a function like "PGPROC *PidGetPGProc(pid_t)",
that would work for backends and aux processes alike. It's a common
pattern to call BackendPidGetProc() followed by AuxiliaryPidGetProc()
currently. Even for the callers that specifically want to only check
backend processes, I think it would be more natural to call
PidGetPGProc(), and then check the process type.

- Heikki

Attachment Content-Type Size
0001-Fix-pg_stat_get_backend_wait_event-for-aux-processes.patch text/x-patch 3.0 KB

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2026-02-02 15:19:00 Re: AIX support
Previous Message Álvaro Herrera 2026-02-02 14:34:47 Re: race condition when writing pg_control