From: Daniel Gustafsson Date: Fri, 28 Apr 2023 08:30:05 +0000 (+0200) Subject: Fix assertion failure in heap_vacuum_rel X-Git-Tag: REL_16_BETA1~122 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=4a6603cd4650a335ee38d894d7bbb452b1bf822f;p=postgresql.git Fix assertion failure in heap_vacuum_rel 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 Reviewed-by: Melanie Plageman Reported-by: John Naylor Discussion: https://postgr.es/m/CAFBsxsFz=GqaG5Ens5aNgVYoV2Y+pfMUijX0ku+CCkWfALwiqg@mail.gmail.com --- diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 0a9ebd22bd0..442db3551b0 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -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;