diff --git a/src/backend/utils/adt/multixactfuncs.c b/src/backend/utils/adt/multixactfuncs.c index 9fe2ebafa73..d9aa58e821d 100644 --- a/src/backend/utils/adt/multixactfuncs.c +++ b/src/backend/utils/adt/multixactfuncs.c @@ -102,23 +102,12 @@ pg_get_multixact_stats(PG_FUNCTION_ARGS) TupleDesc tupdesc; Datum values[4]; bool nulls[4]; - uint64 members; - MultiXactId oldestMultiXactId; - uint32 multixacts; - MultiXactOffset oldestOffset; - MultiXactOffset nextOffset; - uint64 membersBytes; if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("return type must be a row type"))); - GetMultiXactInfo(&multixacts, &nextOffset, &oldestMultiXactId, &oldestOffset); - members = nextOffset - oldestOffset; - - membersBytes = MultiXactOffsetStorageSize(nextOffset, oldestOffset); - if (!has_privs_of_role(GetUserId(), ROLE_PG_READ_ALL_STATS)) { /* @@ -129,6 +118,17 @@ pg_get_multixact_stats(PG_FUNCTION_ARGS) } else { + uint64 members; + MultiXactId oldestMultiXactId; + uint32 multixacts; + MultiXactOffset oldestOffset; + MultiXactOffset nextOffset; + uint64 membersBytes; + + GetMultiXactInfo(&multixacts, &nextOffset, &oldestMultiXactId, &oldestOffset); + members = nextOffset - oldestOffset; + membersBytes = MultiXactOffsetStorageSize(nextOffset, oldestOffset); + values[0] = UInt32GetDatum(multixacts); values[1] = Int64GetDatum(members); values[2] = Int64GetDatum(membersBytes);