diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c
index 3ec10a07c02cf2cff0419527f4ab45548470eef3..fdfa37c39c41c6c0218c1e916b0602c909e4caee 100644
--- a/src/backend/access/heap/pruneheap.c
+++ b/src/backend/access/heap/pruneheap.c
@@ -479,13 +479,22 @@ heap_prune_chain(Relation relation, Buffer buffer, OffsetNumber rootoffnum,
 				break;
 
 			case HEAPTUPLE_DELETE_IN_PROGRESS:
+				{
+					TransactionId	xmax;
+
+					/*
+					 * This tuple may soon become DEAD.  Update the hint field
+					 * so that the page is reconsidered for pruning in future.
+					 * If there was a MultiXactId updater, and it aborted after
+					 * HTSV checked, then we will get an invalid Xid here.
+					 * There is no need for future pruning of the page in that
+					 * case, so skip it.
+					 */
+					xmax = HeapTupleHeaderGetUpdateXid(htup);
+					if (TransactionIdIsValid(xmax))
+						heap_prune_record_prunable(prstate, xmax);
+				}
 
-				/*
-				 * This tuple may soon become DEAD.  Update the hint field so
-				 * that the page is reconsidered for pruning in future.
-				 */
-				heap_prune_record_prunable(prstate,
-										   HeapTupleHeaderGetUpdateXid(htup));
 				break;
 
 			case HEAPTUPLE_LIVE: