3131
3232#define UINT32_ACCESS_ONCE (var ) ((uint32)(*((volatile uint32 *)&(var))))
3333
34+ #define HAS_PGSTAT_PERMISSIONS (role ) (is_member_of_role(GetUserId(), DEFAULT_ROLE_READ_ALL_STATS) || has_privs_of_role(GetUserId(), role))
35+
3436/* Global bgwriter statistics, from bgwriter.c */
3537extern PgStat_MsgBgWriter bgwriterStats ;
3638
@@ -512,7 +514,7 @@ pg_stat_get_progress_info(PG_FUNCTION_ARGS)
512514values [1 ]= ObjectIdGetDatum (beentry -> st_databaseid );
513515
514516/* show rest of the values including relid only to role members */
515- if (has_privs_of_role ( GetUserId (), beentry -> st_userid ))
517+ if (HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
516518{
517519values [2 ]= ObjectIdGetDatum (beentry -> st_progress_command_target );
518520for (i = 0 ;i < PGSTAT_NUM_PROGRESS_PARAM ;i ++ )
@@ -660,8 +662,7 @@ pg_stat_get_activity(PG_FUNCTION_ARGS)
660662}
661663
662664/* Values only available to role member or pg_read_all_stats */
663- if (has_privs_of_role (GetUserId (),beentry -> st_userid )||
664- is_member_of_role (GetUserId (),DEFAULT_ROLE_READ_ALL_STATS ))
665+ if (HAS_PGSTAT_PERMISSIONS (beentry -> st_userid ))
665666{
666667SockAddr zero_clientaddr ;
667668
@@ -915,7 +916,7 @@ pg_stat_get_backend_activity(PG_FUNCTION_ARGS)
915916
916917if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
917918activity = "<backend information not available>" ;
918- else if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
919+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
919920activity = "<insufficient privilege>" ;
920921else if (* (beentry -> st_activity )== '\0' )
921922activity = "<command string not enabled>" ;
@@ -935,7 +936,7 @@ pg_stat_get_backend_wait_event_type(PG_FUNCTION_ARGS)
935936
936937if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
937938wait_event_type = "<backend information not available>" ;
938- else if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
939+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
939940wait_event_type = "<insufficient privilege>" ;
940941else if ((proc = BackendPidGetProc (beentry -> st_procpid ))!= NULL )
941942wait_event_type = pgstat_get_wait_event_type (proc -> wait_event_info );
@@ -956,7 +957,7 @@ pg_stat_get_backend_wait_event(PG_FUNCTION_ARGS)
956957
957958if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
958959wait_event = "<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 = "<insufficient privilege>" ;
961962else if ((proc = BackendPidGetProc (beentry -> st_procpid ))!= NULL )
962963wait_event = pgstat_get_wait_event (proc -> wait_event_info );
@@ -978,7 +979,7 @@ pg_stat_get_backend_activity_start(PG_FUNCTION_ARGS)
978979if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
979980PG_RETURN_NULL ();
980981
981- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
982+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
982983PG_RETURN_NULL ();
983984
984985result = beentry -> st_activity_start_timestamp ;
@@ -1004,7 +1005,7 @@ pg_stat_get_backend_xact_start(PG_FUNCTION_ARGS)
10041005if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
10051006PG_RETURN_NULL ();
10061007
1007- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1008+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
10081009PG_RETURN_NULL ();
10091010
10101011result = beentry -> st_xact_start_timestamp ;
@@ -1026,7 +1027,7 @@ pg_stat_get_backend_start(PG_FUNCTION_ARGS)
10261027if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
10271028PG_RETURN_NULL ();
10281029
1029- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1030+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
10301031PG_RETURN_NULL ();
10311032
10321033result = beentry -> st_proc_start_timestamp ;
@@ -1050,7 +1051,7 @@ pg_stat_get_backend_client_addr(PG_FUNCTION_ARGS)
10501051if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
10511052PG_RETURN_NULL ();
10521053
1053- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1054+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
10541055PG_RETURN_NULL ();
10551056
10561057/* A zeroed client addr means we don't know */
@@ -1097,7 +1098,7 @@ pg_stat_get_backend_client_port(PG_FUNCTION_ARGS)
10971098if ((beentry = pgstat_fetch_stat_beentry (beid ))== NULL )
10981099PG_RETURN_NULL ();
10991100
1100- if (!has_privs_of_role ( GetUserId (), beentry -> st_userid ))
1101+ else if (!HAS_PGSTAT_PERMISSIONS ( beentry -> st_userid ))
11011102PG_RETURN_NULL ();
11021103
11031104/* A zeroed client addr means we don't know */