/* it has storage, ok to call the smgr */
curpages = RelationGetNumberOfBlocks(rel);
+ /* coerce values in pg_class to more desirable types */
+ relpages = (BlockNumber) rel->rd_rel->relpages;
+ reltuples = (double) rel->rd_rel->reltuples;
+ relallvisible = (BlockNumber) rel->rd_rel->relallvisible;
+
+ /*
+ * If it's a zheap relation, then subtract one page to account for
+ * the metapage.
+ */
+ if (RelationStorageIsZHeap(rel))
+ {
+ if (curpages > 0)
+ curpages--;
+ if (relpages > 0)
+ relpages--;
+ }
+
/*
* HACK: if the relation has never yet been vacuumed, use a
* minimum size estimate of 10 pages. The idea here is to avoid
* minimum to indexes.
*/
if (curpages < 10 &&
- (rel->rd_rel->relpages == 0 ||
- (RelationStorageIsZHeap(rel) &&
- rel->rd_rel->relpages == ZHEAP_METAPAGE + 1)) &&
+ relpages == 0 &&
!rel->rd_rel->relhassubclass &&
rel->rd_rel->relkind != RELKIND_INDEX)
curpages = 10;
/* report estimated # pages */
*pages = curpages;
/* quick exit if rel is clearly empty */
- if (curpages == 0 || (RelationStorageIsZHeap(rel) &&
- curpages == ZHEAP_METAPAGE + 1))
+ if (curpages == 0)
{
*tuples = 0;
*allvisfrac = 0;
break;
}
- /* coerce values in pg_class to more desirable types */
- relpages = (BlockNumber) rel->rd_rel->relpages;
- reltuples = (double) rel->rd_rel->reltuples;
- relallvisible = (BlockNumber) rel->rd_rel->relallvisible;
- /*
- * If it's a zheap relation, then subtract the pages
- * to account for the metapage.
- */
- if (relpages > 0 && RelationStorageIsZHeap(rel))
- {
- curpages--;
- relpages--;
- }
/*
* If it's an index, discount the metapage while estimating the
* number of tuples. This is a kluge because it assumes more than