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);