diff options
Diffstat (limited to 'src/backend/utils/adt/pgstatfuncs.c')
-rw-r--r-- | src/backend/utils/adt/pgstatfuncs.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 68830db8633..0212d8d5906 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -1919,19 +1919,30 @@ Datum pg_stat_reset_backend_stats(PG_FUNCTION_ARGS) { PGPROC *proc; + PgBackendStatus *beentry; + ProcNumber procNumber; int backend_pid = PG_GETARG_INT32(0); proc = BackendPidGetProc(backend_pid); - /* - * This could be an auxiliary process but these do not report backend - * statistics due to pgstat_tracks_backend_bktype(), so there is no need - * for an extra call to AuxiliaryPidGetProc(). - */ + /* This could be an auxiliary process */ + if (!proc) + proc = AuxiliaryPidGetProc(backend_pid); + if (!proc) PG_RETURN_VOID(); - pgstat_reset(PGSTAT_KIND_BACKEND, InvalidOid, GetNumberFromPGProc(proc)); + procNumber = GetNumberFromPGProc(proc); + + beentry = pgstat_get_beentry_by_proc_number(procNumber); + if (!beentry) + PG_RETURN_VOID(); + + /* Check if the backend type tracks statistics */ + if (!pgstat_tracks_backend_bktype(beentry->st_backendType)) + PG_RETURN_VOID(); + + pgstat_reset(PGSTAT_KIND_BACKEND, InvalidOid, procNumber); PG_RETURN_VOID(); } |