diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index f12c41f..d4ffd1b 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -2158,11 +2158,12 @@ vacuum_indexes_leader(Relation *Irel, IndexBulkDeleteResult **stats, for (i = 0; i < nindexes; i++) { - bool skip_index = (get_indstats(lps->lvshared, i) == NULL || - skip_parallel_vacuum_index(Irel[i], lps->lvshared)); + bool can_parallel = (get_indstats(lps->lvshared, i) == NULL || + skip_parallel_vacuum_index(Irel[i], + lps->lvshared)); /* Skip the indexes that can be processed by parallel workers */ - if (!skip_index) + if (!can_parallel) continue; vacuum_one_index(Irel[i], &(stats[i]), lps->lvshared, diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index 6526cc1..a32fe28 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -430,6 +430,7 @@ vacuum(List *relations, VacuumParams *params, PG_TRY(); { ListCell *cur; + int nworkers = params->nworkers; in_vacuum = true; VacuumCostActive = (VacuumCostDelay > 0); @@ -446,6 +447,14 @@ vacuum(List *relations, VacuumParams *params, { VacuumRelation *vrel = lfirst_node(VacuumRelation, cur); + /* + * Copy the number of workers. It is possible that we might + * reseted nworkers to -1 to disable parallel vacuum for temp + * tables. + */ + if (nworkers != params->nworkers) + params->nworkers = nworkers; + if (params->options & VACOPT_VACUUM) { if (!vacuum_rel(vrel->oid, vrel->relation, params))