diff --git a/src/backend/storage/ipc/procarray.c b/src/backend/storage/ipc/procarray.c
index cd14667..35337e9 100644
--- a/src/backend/storage/ipc/procarray.c
+++ b/src/backend/storage/ipc/procarray.c
@@ -1304,6 +1304,21 @@ TransactionIdIsActive(TransactionId xid)
 TransactionId
 GetOldestXmin(Relation rel, bool ignoreVacuum)
 {
+	uint8 ignoreFlags = PROC_IN_LOGICAL_DECODING;
+
+	if (ignoreVacuum)
+		ignoreFlags |= PROC_IN_VACUUM;
+
+	return GetOldestXminExtended(rel, ignoreFlags);
+}
+
+/*
+ * GetOldestXminExtended -- Like GetOldestXmin, but can ignore
+ *							arbitrary flags.
+ */
+TransactionId
+GetOldestXminExtended(Relation rel, uint8 ignoreFlags)
+{
 	ProcArrayStruct *arrayP = procArray;
 	TransactionId result;
 	int			index;
@@ -1344,10 +1359,7 @@ GetOldestXmin(Relation rel, bool ignoreVacuum)
 		 * Backend is doing logical decoding which manages xmin separately,
 		 * check below.
 		 */
-		if (pgxact->vacuumFlags & PROC_IN_LOGICAL_DECODING)
-			continue;
-
-		if (ignoreVacuum && (pgxact->vacuumFlags & PROC_IN_VACUUM))
+		if (pgxact->vacuumFlags & ignoreFlags)
 			continue;
 
 		if (allDbs ||
diff --git a/src/include/storage/procarray.h b/src/include/storage/procarray.h
index 9d5a13e..2d3e8d0 100644
--- a/src/include/storage/procarray.h
+++ b/src/include/storage/procarray.h
@@ -53,6 +53,7 @@ extern RunningTransactions GetRunningTransactionData(void);
 
 extern bool TransactionIdIsInProgress(TransactionId xid);
 extern bool TransactionIdIsActive(TransactionId xid);
+extern TransactionId GetOldestXminExtended(Relation rel, uint8 vacuumFlags);
 extern TransactionId GetOldestXmin(Relation rel, bool ignoreVacuum);
 extern TransactionId GetOldestActiveTransactionId(void);
 extern TransactionId GetOldestSafeDecodingTransactionId(void);
