Fix thinko in previous patch to always update pg_class.reltuples/relpages.
I mis-simplified the test where ANALYZE decided if it could get away without doing anything: under the new regime, that's never allowed. Per bug #6068 from Jeff Janes. Back-patch to 8.4, just like previous patch.
This commit is contained in:
parent
334c608f2c
commit
4473b63586
@ -114,7 +114,6 @@ analyze_rel(Oid relid, VacuumStmt *vacstmt, BufferAccessStrategy bstrategy)
|
|||||||
Relation *Irel;
|
Relation *Irel;
|
||||||
int nindexes;
|
int nindexes;
|
||||||
bool hasindex;
|
bool hasindex;
|
||||||
bool analyzableindex;
|
|
||||||
VacAttrStats **vacattrstats;
|
VacAttrStats **vacattrstats;
|
||||||
AnlIndexData *indexdata;
|
AnlIndexData *indexdata;
|
||||||
int targrows,
|
int targrows,
|
||||||
@ -300,7 +299,6 @@ analyze_rel(Oid relid, VacuumStmt *vacstmt, BufferAccessStrategy bstrategy)
|
|||||||
vac_open_indexes(onerel, AccessShareLock, &nindexes, &Irel);
|
vac_open_indexes(onerel, AccessShareLock, &nindexes, &Irel);
|
||||||
hasindex = (nindexes > 0);
|
hasindex = (nindexes > 0);
|
||||||
indexdata = NULL;
|
indexdata = NULL;
|
||||||
analyzableindex = false;
|
|
||||||
if (hasindex)
|
if (hasindex)
|
||||||
{
|
{
|
||||||
indexdata = (AnlIndexData *) palloc0(nindexes * sizeof(AnlIndexData));
|
indexdata = (AnlIndexData *) palloc0(nindexes * sizeof(AnlIndexData));
|
||||||
@ -347,10 +345,7 @@ analyze_rel(Oid relid, VacuumStmt *vacstmt, BufferAccessStrategy bstrategy)
|
|||||||
thisdata->vacattrstats[tcnt] =
|
thisdata->vacattrstats[tcnt] =
|
||||||
examine_attribute(Irel[ind], i + 1);
|
examine_attribute(Irel[ind], i + 1);
|
||||||
if (thisdata->vacattrstats[tcnt] != NULL)
|
if (thisdata->vacattrstats[tcnt] != NULL)
|
||||||
{
|
|
||||||
tcnt++;
|
tcnt++;
|
||||||
analyzableindex = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
thisdata->attr_cnt = tcnt;
|
thisdata->attr_cnt = tcnt;
|
||||||
@ -358,16 +353,11 @@ analyze_rel(Oid relid, VacuumStmt *vacstmt, BufferAccessStrategy bstrategy)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Quit if no analyzable columns.
|
|
||||||
*/
|
|
||||||
if (attr_cnt <= 0 && !analyzableindex)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine how many rows we need to sample, using the worst case from
|
* Determine how many rows we need to sample, using the worst case from
|
||||||
* all analyzable columns. We use a lower bound of 100 rows to avoid
|
* all analyzable columns. We use a lower bound of 100 rows to avoid
|
||||||
* possible overflow in Vitter's algorithm.
|
* possible overflow in Vitter's algorithm. (Note: that will also be
|
||||||
|
* the target in the corner case where there are no analyzable columns.)
|
||||||
*/
|
*/
|
||||||
targrows = 100;
|
targrows = 100;
|
||||||
for (i = 0; i < attr_cnt; i++)
|
for (i = 0; i < attr_cnt; i++)
|
||||||
@ -477,9 +467,6 @@ analyze_rel(Oid relid, VacuumStmt *vacstmt, BufferAccessStrategy bstrategy)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We skip to here if there were no analyzable columns */
|
|
||||||
cleanup:
|
|
||||||
|
|
||||||
/* If this isn't part of VACUUM ANALYZE, let index AMs do cleanup */
|
/* If this isn't part of VACUUM ANALYZE, let index AMs do cleanup */
|
||||||
if (!vacstmt->vacuum)
|
if (!vacstmt->vacuum)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user