*** a/src/backend/commands/explain.c
--- b/src/backend/commands/explain.c
***************
*** 85,90 **** static void show_sort_group_keys(PlanState *planstate, const char *qlabel,
--- 85,92 ----
  					 List *ancestors, ExplainState *es);
  static void show_sort_info(SortState *sortstate, ExplainState *es);
  static void show_hash_info(HashState *hashstate, ExplainState *es);
+ static void show_tidbitmap_info(BitmapHeapScanState *planstate,
+ 								ExplainState *es);
  static void show_instrumentation_count(const char *qlabel, int which,
  						   PlanState *planstate, ExplainState *es);
  static void show_foreignscan_info(ForeignScanState *fsstate, ExplainState *es);
***************
*** 1250,1256 **** ExplainNode(PlanState *planstate, List *ancestors,
  			if (((BitmapHeapScan *) plan)->bitmapqualorig)
  				show_instrumentation_count("Rows Removed by Index Recheck", 2,
  										   planstate, es);
! 			/* FALL THRU */
  		case T_SeqScan:
  		case T_ValuesScan:
  		case T_CteScan:
--- 1252,1264 ----
  			if (((BitmapHeapScan *) plan)->bitmapqualorig)
  				show_instrumentation_count("Rows Removed by Index Recheck", 2,
  										   planstate, es);
! 			show_scan_qual(plan->qual, "Filter", planstate, ancestors, es);
! 			if (plan->qual)
! 				show_instrumentation_count("Rows Removed by Filter", 1,
! 										   planstate, es);
! 			if (es->analyze)
! 				show_tidbitmap_info((BitmapHeapScanState *) planstate, es);
! 			break;
  		case T_SeqScan:
  		case T_ValuesScan:
  		case T_CteScan:
***************
*** 1879,1884 **** show_hash_info(HashState *hashstate, ExplainState *es)
--- 1887,1915 ----
  }
  
  /*
+  * If it's EXPLAIN ANALYZE, show exact/lossy pages for a BitmapHeapScan node
+  */
+ static void
+ show_tidbitmap_info(BitmapHeapScanState *planstate, ExplainState *es)
+ {
+ 	if (es->format != EXPLAIN_FORMAT_TEXT)
+ 	{
+ 		ExplainPropertyLong("Exact Heap Blocks", planstate->exact_pages, es);
+ 		ExplainPropertyLong("Lossy Heap Blocks", planstate->lossy_pages, es);
+ 	}
+ 	else
+ 	{
+ 		appendStringInfoSpaces(es->str, es->indent * 2);
+ 		appendStringInfoString(es->str, "Heap Blocks:");
+ 		if (planstate->exact_pages > 0)
+ 			appendStringInfo(es->str, " exact=%ld", planstate->exact_pages);
+ 		if (planstate->lossy_pages > 0)
+ 			appendStringInfo(es->str, " lossy=%ld", planstate->lossy_pages);
+ 		appendStringInfoChar(es->str, '\n');
+ 	}
+ }
+ 
+ /*
   * If it's EXPLAIN ANALYZE, show instrumentation information for a plan node
   *
   * "which" identifies which instrumentation counter to print
*** a/src/backend/executor/nodeBitmapHeapscan.c
--- b/src/backend/executor/nodeBitmapHeapscan.c
***************
*** 170,175 **** BitmapHeapNext(BitmapHeapScanState *node)
--- 170,180 ----
  			 */
  			bitgetpage(scan, tbmres);
  
+ 			if (tbmres->ntuples >= 0)
+ 				node->exact_pages++;
+ 			else
+ 				node->lossy_pages++;
+ 
  			/*
  			 * Set rs_cindex to first slot to examine
  			 */
***************
*** 553,558 **** ExecInitBitmapHeapScan(BitmapHeapScan *node, EState *estate, int eflags)
--- 558,565 ----
  	scanstate->tbm = NULL;
  	scanstate->tbmiterator = NULL;
  	scanstate->tbmres = NULL;
+ 	scanstate->exact_pages = 0;
+ 	scanstate->lossy_pages = 0;
  	scanstate->prefetch_iterator = NULL;
  	scanstate->prefetch_pages = 0;
  	scanstate->prefetch_target = 0;
*** a/src/include/nodes/execnodes.h
--- b/src/include/nodes/execnodes.h
***************
*** 1338,1343 **** typedef struct BitmapIndexScanState
--- 1338,1345 ----
   *		tbm				   bitmap obtained from child index scan(s)
   *		tbmiterator		   iterator for scanning current pages
   *		tbmres			   current-page data
+  *		exact_pages		   total number of exact pages retrieved
+  *		lossy_pages		   total number of lossy pages retrieved
   *		prefetch_iterator  iterator for prefetching ahead of current page
   *		prefetch_pages	   # pages prefetch iterator is ahead of current
   *		prefetch_target    target prefetch distance
***************
*** 1350,1355 **** typedef struct BitmapHeapScanState
--- 1352,1359 ----
  	TIDBitmap  *tbm;
  	TBMIterator *tbmiterator;
  	TBMIterateResult *tbmres;
+ 	long		exact_pages;
+ 	long		lossy_pages;
  	TBMIterator *prefetch_iterator;
  	int			prefetch_pages;
  	int			prefetch_target;
