diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c
index 5429d5e..f732e71 100644
--- a/src/backend/access/transam/xlogutils.c
+++ b/src/backend/access/transam/xlogutils.c
@@ -422,7 +422,11 @@ CreateFakeRelcacheEntry(RelFileNode rnode)
 	rel->rd_lockInfo.lockRelId.dbId = rnode.dbNode;
 	rel->rd_lockInfo.lockRelId.relId = rnode.relNode;
 
-	rel->rd_smgr = NULL;
+	/*
+	 * Open the underlying storage, but don't set rd_owner. We want the
+	 * SmgrRelation to persist after the fake relcache entry is freed.
+	 */
+	rel->rd_smgr = smgropen(rnode, InvalidBackendId);
 
 	return rel;
 }
