3232
3333#define UINT32_ACCESS_ONCE (var ) ((uint32)(*((volatile uint32 *)&(var))))
3434
35+ #define HAS_PGSTAT_PERMISSIONS (role ) (is_member_of_role(GetUserId(), DEFAULT_ROLE_READ_ALL_STATS) || has_privs_of_role(GetUserId(), role))
36+
3537/* Global bgwriter statistics, from bgwriter.c */
3638extern PgStat_MsgBgWriter bgwriterStats ;
3739
@@ -513,7 +515,7 @@ pg_stat_get_progress_info(PG_FUNCTION_ARGS)
513515values [1 ]= ObjectIdGetDatum (beentry -> st_databaseid );
514516
515517/* show rest of the values including relid only to role members */
516- if (has_privs_of_role ( GetUserId (), beentry -> st_userid ))
518+ if (HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
517519{
518520values [2 ]= ObjectIdGetDatum (beentry -> st_progress_command_target );
519521for (i = 0 ;i < PGSTAT_NUM_PROGRESS_PARAM ;i ++ )
@@ -661,8 +663,7 @@ pg_stat_get_activity(PG_FUNCTION_ARGS)
661663}
662664
663665/* Values only available to role member or pg_read_all_stats */
664- if (has_privs_of_role (GetUserId (),beentry -> st_userid )||
665- is_member_of_role (GetUserId (),DEFAULT_ROLE_READ_ALL_STATS ))
666+ if (HAS_PGSTAT_PERMISSIONS (beentry -> st_userid ))
666667{
667668SockAddr zero_clientaddr ;
668669char * clipped_activity ;
@@ -932,7 +933,7 @@ pg_stat_get_backend_activity(PG_FUNCTION_ARGS)
932933
933934if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
934935activity = "<backend information not available>" ;
935- else if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
936+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
936937activity = "<insufficient privilege>" ;
937938else if (* (beentry -> st_activity_raw )== '\0' )
938939activity = "<command string not enabled>" ;
@@ -956,7 +957,7 @@ pg_stat_get_backend_wait_event_type(PG_FUNCTION_ARGS)
956957
957958if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
958959wait_event_type = "<backend information not available>" ;
959- else if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
960+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
960961wait_event_type = "<insufficient privilege>" ;
961962else if ((proc = BackendPidGetProc (beentry -> st_procpid ))!= NULL )
962963wait_event_type = pgstat_get_wait_event_type (proc -> wait_event_info );
@@ -977,7 +978,7 @@ pg_stat_get_backend_wait_event(PG_FUNCTION_ARGS)
977978
978979if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
979980wait_event = "<backend information not available>" ;
980- else if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
981+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
981982wait_event = "<insufficient privilege>" ;
982983else if ((proc = BackendPidGetProc (beentry -> st_procpid ))!= NULL )
983984wait_event = pgstat_get_wait_event (proc -> wait_event_info );
@@ -999,7 +1000,7 @@ pg_stat_get_backend_activity_start(PG_FUNCTION_ARGS)
9991000if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
10001001PG_RETURN_NULL ();
10011002
1002- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1003+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
10031004PG_RETURN_NULL ();
10041005
10051006result = beentry -> st_activity_start_timestamp ;
@@ -1025,7 +1026,7 @@ pg_stat_get_backend_xact_start(PG_FUNCTION_ARGS)
10251026if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
10261027PG_RETURN_NULL ();
10271028
1028- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1029+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
10291030PG_RETURN_NULL ();
10301031
10311032result = beentry -> st_xact_start_timestamp ;
@@ -1047,7 +1048,7 @@ pg_stat_get_backend_start(PG_FUNCTION_ARGS)
10471048if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
10481049PG_RETURN_NULL ();
10491050
1050- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1051+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
10511052PG_RETURN_NULL ();
10521053
10531054result = beentry -> st_proc_start_timestamp ;
@@ -1071,7 +1072,7 @@ pg_stat_get_backend_client_addr(PG_FUNCTION_ARGS)
10711072if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
10721073PG_RETURN_NULL ();
10731074
1074- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1075+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
10751076PG_RETURN_NULL ();
10761077
10771078/* A zeroed client addr means we don't know */
@@ -1118,7 +1119,7 @@ pg_stat_get_backend_client_port(PG_FUNCTION_ARGS)
11181119if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
11191120PG_RETURN_NULL ();
11201121
1121- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1122+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
11221123PG_RETURN_NULL ();
11231124
11241125/* A zeroed client addr means we don't know */