I've noticed that EXPLAIN ANALYZE shows no information on exact/lossy
blocks for a bitmap heap scan when both the numbers of exact/lossy pages
retrieved by the node are zero.  Such an example is shown below.  I
think it would be better to suppress the 'Heap Blocks' line in that
case, based on the same idea of the 'Buffers' line.  Patch attached.

postgres=# explain (analyze, verbose, buffers) select * from test where
id < 10;
                                                    QUERY PLAN
------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on public.test  (cost=4.29..8.31 rows=1 width=29)
(actual time=0.006..0.006 rows=0 loops=1)
   Output: id, inserted, data
   Recheck Cond: (test.id < 10)
   Heap Blocks:
   Buffers: shared hit=2
   ->  Bitmap Index Scan on test_pkey  (cost=0.00..4.29 rows=1 width=0)
(actual time=0.003..0.003 rows=0 loops=1)
         Index Cond: (test.id < 10)
         Buffers: shared hit=2
 Planning time: 0.118 ms
 Execution time: 0.027 ms
(10 rows)

Thanks,

Best regards,
Etsuro Fujita
*** a/src/backend/commands/explain.c
--- b/src/backend/commands/explain.c
***************
*** 1937,1949 **** show_tidbitmap_info(BitmapHeapScanState *planstate, ExplainState *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');
  	}
  }
  
--- 1937,1952 ----
  	}
  	else
  	{
! 		if (planstate->exact_pages > 0 || planstate->lossy_pages > 0)
! 		{
! 			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');
! 		}
  	}
  }
  
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to