diff --git a/src/backend/utils/adt/multixactfuncs.c b/src/backend/utils/adt/multixactfuncs.c index 9fe2ebafa7..abd7ec1dc9 100644 --- a/src/backend/utils/adt/multixactfuncs.c +++ b/src/backend/utils/adt/multixactfuncs.c @@ -102,33 +102,33 @@ 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)) { /* * Only superusers and roles with privileges of pg_read_all_stats can * see details. */ - memset(nulls, true, sizeof(bool) * tupdesc->natts); + memset(nulls, true, sizeof(nulls)); } 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);