]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix contrib/pg_freespacemap's underestimate of the number of pages it
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 7 Apr 2009 18:11:04 +0000 (18:11 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 7 Apr 2009 18:11:04 +0000 (18:11 +0000)
could find in the FSM.  Per report from Dimitri Fontaine and Andrew Gierth.

(Affects only 8.2 and 8.3 since HEAD no longer has MaxFSMPages at all.)

contrib/pg_freespacemap/pg_freespacemap.c

index cfe5cb0268c7909763008cd51f20c98cd5352e3b..e4475c1ffc1b60d9ee8eee3856483e714abe3256 100644 (file)
@@ -3,7 +3,7 @@
  * pg_freespacemap.c
  *       display some contents of the free space relation and page maps.
  *
- *       $PostgreSQL: pgsql/contrib/pg_freespacemap/pg_freespacemap.c,v 1.9 2006/10/19 18:32:46 tgl Exp $
+ *       $PostgreSQL: pgsql/contrib/pg_freespacemap/pg_freespacemap.c,v 1.9.2.1 2009/04/07 18:11:04 tgl Exp $
  *-------------------------------------------------------------------------
  */
 #include "postgres.h"
@@ -94,6 +94,7 @@ pg_freespacemap_pages(PG_FUNCTION_ARGS)
        if (SRF_IS_FIRSTCALL())
        {
                int                     i;
+               int                     nchunks;        /* Size of freespace.c's arena. */
                int                     numPages;       /* Max possible no. of pages in map. */
                int                     nPages;         /* Mapped pages for a relation. */
 
@@ -102,7 +103,10 @@ pg_freespacemap_pages(PG_FUNCTION_ARGS)
                 */
                FreeSpaceMap = GetFreeSpaceMap();
 
-               numPages = MaxFSMPages;
+               /* this must match calculation in InitFreeSpaceMap(): */
+               nchunks = (MaxFSMPages - 1) / CHUNKPAGES + 1;
+               /* Worst case (lots of indexes) could have this many pages: */
+               numPages = nchunks * INDEXCHUNKPAGES;
 
                funcctx = SRF_FIRSTCALL_INIT();