diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c index 014823a3d73c3c5610b4a969ab2a3bd54adbafb9..87e6f17d44362e5ea3af980239771199052d498d 100644 --- a/src/backend/access/index/genam.c +++ b/src/backend/access/index/genam.c @@ -208,10 +208,15 @@ BuildIndexValueDescription(Relation indexRelation, { AttrNumber attnum = idxrec->indkey.values[keyno]; - aclresult = pg_attribute_aclcheck(indrelid, attnum, GetUserId(), - ACL_SELECT); - - if (aclresult != ACLCHECK_OK) + /* + * Note that if attnum == InvalidAttrNumber, then this is an + * index based on an expression and we return no detail rather + * than try to figure out what column(s) the expression includes + * and if the user has SELECT rights on them. + */ + if (attnum == InvalidAttrNumber || + pg_attribute_aclcheck(indrelid, attnum, GetUserId(), + ACL_SELECT) != ACLCHECK_OK) { /* No access, so clean up and return */ ReleaseSysCache(ht_idx);