diff --git a/src/backend/commands/statscmds.c b/src/backend/commands/statscmds.c
index 3057d89d50..6fd4bd9f6d 100644
--- a/src/backend/commands/statscmds.c
+++ b/src/backend/commands/statscmds.c
@@ -482,16 +482,19 @@ AlterStatistics(AlterStatsStmt *stmt)
 		return InvalidObjectAddress;
 	}
 
-	/* Search pg_statistic_ext */
-	rel = table_open(StatisticExtRelationId, RowExclusiveLock);
-
-	oldtup = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(stxoid));
-
 	/* Must be owner of the existing statistics object */
 	if (!pg_statistics_object_ownercheck(stxoid, GetUserId()))
 		aclcheck_error(ACLCHECK_NOT_OWNER, OBJECT_STATISTIC_EXT,
 					   NameListToString(stmt->defnames));
 
+	oldtup = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(stxoid));
+
+	if (!HeapTupleIsValid(oldtup)) /* should not happen */
+		elog(ERROR, "cache lookup failed for statistics object %u", stxoid);
+
+	/* Search pg_statistic_ext */
+	rel = table_open(StatisticExtRelationId, RowExclusiveLock);
+
 	/* Build new tuple. */
 	memset(repl_val, 0, sizeof(repl_val));
 	memset(repl_null, false, sizeof(repl_null));