aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/pgstatfuncs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt/pgstatfuncs.c')
-rw-r--r--src/backend/utils/adt/pgstatfuncs.c23
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();
}