Only show pg_stat_replication details to superusers
authorMagnus Hagander
Sun, 23 Jan 2011 16:28:19 +0000 (17:28 +0100)
committerMagnus Hagander
Sun, 23 Jan 2011 16:28:19 +0000 (17:28 +0100)
doc/src/sgml/monitoring.sgml
src/backend/replication/walsender.c

index 241131ce6144f3bd3d2c54d067cb41ac216276bb..306af4e454405aec18fbac4bb55c94a82e81b965 100644 (file)
@@ -299,7 +299,9 @@ postgres: user database host 
       One row per WAL sender process, showing process ID,
       user OID, user name, application name, client's address and port number,
       time at which the server process began execution, current WAL sender
-      state and transaction log location.
+      state and transaction log location. The columns detailing what exactly
+      the connection is doing are only visible if the user examining the view
+      is a superuser.
      
      
 
index 14b43d855bade3979442d03de31b820d06136b79..8a6392345697035028ba2c08165e050ae3d5330b 100644 (file)
@@ -1141,8 +1141,20 @@ pg_stat_get_wal_senders(PG_FUNCTION_ARGS)
 
        memset(nulls, 0, sizeof(nulls));
        values[0] = Int32GetDatum(walsnd->pid);
-       values[1] = CStringGetTextDatum(WalSndGetStateString(state));
-       values[2] = CStringGetTextDatum(sent_location);
+       if (!superuser())
+       {
+           /*
+            * Only superusers can see details. Other users only get
+            * the pid value to know it's a walsender, but no details.
+            */
+           nulls[1] = true;
+           nulls[2] = true;
+       }
+       else
+       {
+           values[1] = CStringGetTextDatum(WalSndGetStateString(state));
+           values[2] = CStringGetTextDatum(sent_location);
+       }
 
        tuplestore_putvalues(tupstore, tupdesc, values, nulls);
    }