diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index 94a5aee90b5..7d9812804ce 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -784,7 +784,9 @@ make_new_heap(Oid OIDOldHeap, Oid NewTableSpace, Oid NewAccessMethod,
 	 * Advance command counter so that the newly-created relation's catalog
 	 * tuples will be visible to table_open.
 	 */
+	invalidation_failure = true;
 	CommandCounterIncrement();
+	invalidation_failure = false;
 
 	/*
 	 * If necessary, create a TOAST table for the new relation.
diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c
index 30048e153e5..ca8a16c50f6 100644
--- a/src/backend/utils/cache/inval.c
+++ b/src/backend/utils/cache/inval.c
@@ -180,6 +180,8 @@ typedef struct InvalMessageArray
 
 static InvalMessageArray InvalMessageArrays[2];
 
+bool	invalidation_failure = false;
+
 /* Control information for one logical group of messages */
 typedef struct InvalidationMsgsGroup
 {
@@ -1419,6 +1421,9 @@ CommandEndInvalidationMessages(void)
 	ProcessInvalidationMessages(&transInvalInfo->ii.CurrentCmdInvalidMsgs,
 								LocalExecuteInvalidationMessage);
 
+	if (invalidation_failure)
+		elog(ERROR, "failure during cache invalidation");
+
 	/* WAL Log per-command invalidation messages for wal_level=logical */
 	if (XLogLogicalInfoActive())
 		LogLogicalInvalidations();
diff --git a/src/include/utils/inval.h b/src/include/utils/inval.h
index b5fbd754c2c..1512e47d38d 100644
--- a/src/include/utils/inval.h
+++ b/src/include/utils/inval.h
@@ -20,6 +20,8 @@
 
 extern PGDLLIMPORT int debug_discard_caches;
 
+extern bool	invalidation_failure;
+
 typedef void (*SyscacheCallbackFunction) (Datum arg, int cacheid, uint32 hashvalue);
 typedef void (*RelcacheCallbackFunction) (Datum arg, Oid relid);
 typedef void (*RelSyncCallbackFunction) (Datum arg, Oid relid);
