Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix assertion failure in heap_vacuum_rel
authorDaniel Gustafsson <dgustafsson@postgresql.org>
Fri, 28 Apr 2023 08:30:05 +0000 (10:30 +0200)
committerDaniel Gustafsson <dgustafsson@postgresql.org>
Fri, 28 Apr 2023 08:30:05 +0000 (10:30 +0200)
Commit 7d71d3dd08 changed resetting the VacuumFailsafeActive flag to an
assertion since the flag is reset before starting vacuuming a relation.
This however failed to take recursive calls of vacuum_rel() and vacuum
of TOAST tables into consideration. Fix by reverting back to resettting
the flag.

Author: Masahiko Sawada <sawada.mshk@gmail.com>
Reviewed-by: Melanie Plageman <melanieplageman@gmail.com>
Reported-by: John Naylor <john.naylor@enterprisedb.com>
Discussion: https://postgr.es/m/CAFBsxsFz=GqaG5Ens5aNgVYoV2Y+pfMUijX0ku+CCkWfALwiqg@mail.gmail.com

src/backend/access/heap/vacuumlazy.c

index 0a9ebd22bd05828e6492f4ff7fc17c1164859b3e..442db3551b040e3743ad3d69d30f28dc1f2f74c3 100644 (file)
@@ -389,7 +389,11 @@ heap_vacuum_rel(Relation rel, VacuumParams *params,
    Assert(params->index_cleanup != VACOPTVALUE_UNSPECIFIED);
    Assert(params->truncate != VACOPTVALUE_UNSPECIFIED &&
           params->truncate != VACOPTVALUE_AUTO);
-   Assert(!VacuumFailsafeActive);
+   /*
+    * While VacuumFailSafeActive is reset to false before calling this, we
+    * still need to reset it here due to recursive calls.
+    */
+   VacuumFailsafeActive = false;
    vacrel->consider_bypass_optimization = true;
    vacrel->do_index_vacuuming = true;
    vacrel->do_index_cleanup = true;