Fix thinko in previous patch to always update pg_class.reltuples/relpages.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 19 Jun 2011 18:00:48 +0000 (14:00 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 19 Jun 2011 18:00:48 +0000 (14:00 -0400)
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.

src/backend/commands/analyze.c

index 7b73355dde36c86a5cb22717fffb6e44a305a7ba..a68da590ce855d3b80038a477e48860eec1e0fac 100644 (file)
@@ -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;
@@ -425,16 +420,11 @@ 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))
    {