From: Bruce Momjian Date: Thu, 20 Mar 2003 18:51:16 +0000 (+0000) Subject: It would also be handy if users could see their own pg_stat_activity X-Git-Tag: REL7_4_BETA1~879 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=db5d7ccac99e4b1f3ea0d09f7fc1b6f0682f336d;p=postgresql It would also be handy if users could see their own pg_stat_activity queries while the rest remain blank. Kevin Brown --- diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index 002134c9ac..48bbe9561b 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -1,5 +1,5 @@ @@ -212,9 +212,10 @@ postgres: user database host STATS_COMMAND_STRING configuration option has been enabled. Furthermore, these columns can only be accessed by - superusers; to other users, they always appear NULL. (Note that - because of the collector's reporting delay, current query will - only be up-to-date for long-running queries.) + superusers; or when the user examining the view is the same as the user + in the row; for others it reads as null. (Note that because of the + collector's reporting delay, current query will only be up-to-date for + long-running queries.) @@ -534,7 +535,8 @@ postgres: user database host text Current query of backend process (NULL if caller is not - superuser, or STATS_COMMAND_STRING is not enabled) + superuser, or is the same user as that of the backend being queried, + or STATS_COMMAND_STRING is not enabled) diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 455da1c2aa..c2f0ea2c82 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -284,14 +284,14 @@ pg_stat_get_backend_activity(PG_FUNCTION_ARGS) int len; text *result; - if (!superuser()) - PG_RETURN_NULL(); - beid = PG_GETARG_INT32(0); if ((beentry = pgstat_fetch_stat_beentry(beid)) == NULL) PG_RETURN_NULL(); + if (!superuser() && beentry->userid != GetUserId()) + PG_RETURN_NULL(); + len = strlen(beentry->activity); result = palloc(VARHDRSZ + len); VARATT_SIZEP(result) = VARHDRSZ + len;