diff --git a/contrib/postgres_fdw/connection.c b/contrib/postgres_fdw/connection.c
index 6bac4ad23e..10e888f5f9 100644
--- a/contrib/postgres_fdw/connection.c
+++ b/contrib/postgres_fdw/connection.c
@@ -1405,10 +1405,17 @@ pgfdw_abort_cleanup(ConnCacheEntry *entry, const char *sql, bool toplevel)
 
 		entry->have_prep_stmt = false;
 		entry->have_error = false;
-		/* Also reset per-connection state */
-		memset(&entry->state, 0, sizeof(entry->state));
 	}
 
+	/*
+	 * If pendingAreq of the per-connection state is not NULL, it means that
+	 * an asynchronous fetch begun by fetch_more_data_begin() was not done
+	 * successfully and thus the per-connection state was not reset in
+	 * fetch_more_data(); in that case reset the per-connection state here.
+	 */
+	if (entry->state.pendingAreq)
+		memset(&entry->state, 0, sizeof(entry->state));
+
 	/* Disarm changing_xact_state if it all worked */
 	entry->changing_xact_state = false;
 }
