From d3c7bd63b70feda652790ec7c6c634390a918ad3 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Thu, 17 Jan 2008 23:47:07 +0000 Subject: [PATCH] Backpatch my fix of rev 1.48 to avoid a division-by-zero error in the cost-limit vacuum code. Per trouble report from Joshua Drake. --- src/backend/postmaster/autovacuum.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 8c26a074a7..0e59974b0a 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.5.2.7 2007/01/14 20:18:30 alvherre Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.5.2.8 2008/01/17 23:47:07 alvherre Exp $ * *------------------------------------------------------------------------- */ @@ -814,6 +814,10 @@ test_rel_for_autovac(Oid relid, PgStat_StatTabEntry *tabentry, * If there is a tuple in pg_autovacuum, use it; else, use the GUC * defaults. Note that the fields may contain "-1" (or indeed any * negative value), which means use the GUC defaults for each setting. + * + * Note: in cost_limit, 0 also means use the value from elsewhere, because + * 0 is not a valid value for VacuumCostLimit. + */ if (avForm != NULL) { @@ -827,9 +831,9 @@ test_rel_for_autovac(Oid relid, PgStat_StatTabEntry *tabentry, anl_base_thresh = (avForm->anl_base_thresh >= 0) ? avForm->anl_base_thresh : autovacuum_anl_thresh; - vac_cost_limit = (avForm->vac_cost_limit >= 0) ? + vac_cost_limit = (avForm->vac_cost_limit > 0) ? avForm->vac_cost_limit : - ((autovacuum_vac_cost_limit >= 0) ? + ((autovacuum_vac_cost_limit > 0) ? autovacuum_vac_cost_limit : VacuumCostLimit); vac_cost_delay = (avForm->vac_cost_delay >= 0) ? @@ -845,7 +849,7 @@ test_rel_for_autovac(Oid relid, PgStat_StatTabEntry *tabentry, anl_scale_factor = autovacuum_anl_scale; anl_base_thresh = autovacuum_anl_thresh; - vac_cost_limit = (autovacuum_vac_cost_limit >= 0) ? + vac_cost_limit = (autovacuum_vac_cost_limit > 0) ? autovacuum_vac_cost_limit : VacuumCostLimit; vac_cost_delay = (autovacuum_vac_cost_delay >= 0) ? -- 2.50.1