diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2011-06-19 14:00:48 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2011-06-19 14:00:48 -0400 |
commit | 63513b207df618b52cf0bdf42c1ec3f6e9378f40 (patch) | |
tree | 49cea1621f9e1f79f73bede33cc3e01eb69fbeb0 /src | |
parent | 8a8fbe7e799cfc0d8dc5ffef5640df6dac8acd6c (diff) | |
download | postgresql-63513b207df618b52cf0bdf42c1ec3f6e9378f40.tar.gz postgresql-63513b207df618b52cf0bdf42c1ec3f6e9378f40.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/commands/analyze.c | 17 |
1 files changed, 2 insertions, 15 deletions
diff --git a/src/backend/commands/analyze.c b/src/backend/commands/analyze.c index 7b73355dde3..a68da590ce8 100644 --- a/src/backend/commands/analyze.c +++ b/src/backend/commands/analyze.c @@ -266,7 +266,6 @@ do_analyze_rel(Relation onerel, VacuumStmt *vacstmt, bool inh) Relation *Irel; int nindexes; bool hasindex; - bool analyzableindex; VacAttrStats **vacattrstats; AnlIndexData *indexdata; int targrows, @@ -380,7 +379,6 @@ do_analyze_rel(Relation onerel, VacuumStmt *vacstmt, bool inh) } hasindex = (nindexes > 0); indexdata = NULL; - analyzableindex = false; if (hasindex) { indexdata = (AnlIndexData *) palloc0(nindexes * sizeof(AnlIndexData)); @@ -414,10 +412,7 @@ do_analyze_rel(Relation onerel, VacuumStmt *vacstmt, bool inh) thisdata->vacattrstats[tcnt] = examine_attribute(Irel[ind], i + 1, indexkey); if (thisdata->vacattrstats[tcnt] != NULL) - { tcnt++; - analyzableindex = true; - } } } thisdata->attr_cnt = tcnt; @@ -426,15 +421,10 @@ do_analyze_rel(Relation onerel, VacuumStmt *vacstmt, bool inh) } /* - * 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 * 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; for (i = 0; i < attr_cnt; i++) @@ -573,9 +563,6 @@ do_analyze_rel(Relation onerel, VacuumStmt *vacstmt, bool inh) if (!inh) pgstat_report_analyze(onerel, totalrows, totaldeadrows); - /* 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 (!(vacstmt->options & VACOPT_VACUUM)) { |