aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/src/sgml/monitoring.sgml12
-rw-r--r--src/backend/utils/adt/pgstatfuncs.c6
2 files changed, 10 insertions, 8 deletions
diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml
index 002134c9acd..48bbe9561bb 100644
--- a/doc/src/sgml/monitoring.sgml
+++ b/doc/src/sgml/monitoring.sgml
@@ -1,5 +1,5 @@
<!--
-$Header: /cvsroot/pgsql/doc/src/sgml/monitoring.sgml,v 1.16 2003/03/20 03:34:55 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/monitoring.sgml,v 1.17 2003/03/20 18:51:16 momjian Exp $
-->
<chapter id="monitoring">
@@ -212,9 +212,10 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
data on the current query are only available if the
<varname>STATS_COMMAND_STRING</varname> 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.)</entry>
+ 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.)</entry>
</row>
<row>
@@ -534,7 +535,8 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
<entry><type>text</type></entry>
<entry>
Current query of backend process (NULL if caller is not
- superuser, or <varname>STATS_COMMAND_STRING</varname> is not enabled)
+ superuser, or is the same user as that of the backend being queried,
+ or <varname>STATS_COMMAND_STRING</varname> is not enabled)
</entry>
</row>
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c
index 455da1c2aa9..c2f0ea2c829 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;