VACUUM VERBOSE: Show dead items for an empty table.
authorPeter Geoghegan <[email protected]>
Fri, 15 Apr 2022 21:20:56 +0000 (14:20 -0700)
committerPeter Geoghegan <[email protected]>
Fri, 15 Apr 2022 21:20:56 +0000 (14:20 -0700)
Be consistent about the lines that VACUUM VERBOSE outputs by including
an "index scan not needed: " line for completely empty tables. This
makes the output more readable, especially with multiple distinct VACUUM
operations processed by the same VACUUM command.  It's also more
consistent; even empty tables can use the failsafe, which wasn't
reported in the standard way until now.

Follow-up to commit 6e20f460, which taught VACUUM VERBOSE to be more
consistent about reporting on scanned pages with empty tables.

src/backend/access/heap/vacuumlazy.c

index 3259ebd98a41c8fb83950df943dd2753a54a828e..8abb6dca419aa94c2c419e6ed9c163579f9677fa 100644 (file)
@@ -715,31 +715,29 @@ heap_vacuum_rel(Relation rel, VacuumParams *params,
                                                                 _("new relminmxid: %u, which is %d MXIDs ahead of previous value\n"),
                                                                 vacrel->NewRelminMxid, diff);
                        }
-                       if (orig_rel_pages > 0)
+                       if (vacrel->do_index_vacuuming)
                        {
-                               if (vacrel->do_index_vacuuming)
-                               {
-                                       if (vacrel->nindexes == 0 || vacrel->num_index_scans == 0)
-                                               appendStringInfoString(&buf, _("index scan not needed: "));
-                                       else
-                                               appendStringInfoString(&buf, _("index scan needed: "));
+                               if (vacrel->nindexes == 0 || vacrel->num_index_scans == 0)
+                                       appendStringInfoString(&buf, _("index scan not needed: "));
+                               else
+                                       appendStringInfoString(&buf, _("index scan needed: "));
 
-                                       msgfmt = _("%u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n");
-                               }
+                               msgfmt = _("%u pages from table (%.2f%% of total) had %lld dead item identifiers removed\n");
+                       }
+                       else
+                       {
+                               if (!vacrel->failsafe_active)
+                                       appendStringInfoString(&buf, _("index scan bypassed: "));
                                else
-                               {
-                                       if (!vacrel->failsafe_active)
-                                               appendStringInfoString(&buf, _("index scan bypassed: "));
-                                       else
-                                               appendStringInfoString(&buf, _("index scan bypassed by failsafe: "));
+                                       appendStringInfoString(&buf, _("index scan bypassed by failsafe: "));
 
-                                       msgfmt = _("%u pages from table (%.2f%% of total) have %lld dead item identifiers\n");
-                               }
-                               appendStringInfo(&buf, msgfmt,
-                                                                vacrel->lpdead_item_pages,
-                                                                100.0 * vacrel->lpdead_item_pages / orig_rel_pages,
-                                                                (long long) vacrel->lpdead_items);
+                               msgfmt = _("%u pages from table (%.2f%% of total) have %lld dead item identifiers\n");
                        }
+                       appendStringInfo(&buf, msgfmt,
+                                                        vacrel->lpdead_item_pages,
+                                                        orig_rel_pages == 0 ? 100.0 :
+                                                        100.0 * vacrel->lpdead_item_pages / orig_rel_pages,
+                                                        (long long) vacrel->lpdead_items);
                        for (int i = 0; i < vacrel->nindexes; i++)
                        {
                                IndexBulkDeleteResult *istat = vacrel->indstats[i];