Skip site navigation (1) Skip section navigation (2)

Re: patch for pg_autovacuum 8.0.x prevent segv for dropped

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: daveg <daveg(at)sonic(dot)net>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: patch for pg_autovacuum 8.0.x prevent segv for dropped
Date: 2005-10-20 14:52:26
Message-ID: 4357AF2A.4040300@dunslane.net (view raw or flat)
Thread:
Lists: pgsql-patches
Small nit: please observe postgres community conventions regarding

a) indentation (BSD style, tabsize 4) and
b) diff type (context, not unidiff)

The patch itself looks ok to me.

cheers

andrew

daveg wrote:

>Apologies if this is old news, but pg_autovacuum in 8.0.x has the bad habit
>of SEGVing and exiting when a table gets dropped out from under it. This
>creates problems if you rely on pg_autovacuum for the bulk of your vacuuming
>as it forgets it's statistics when it is restarted and so will skip some
>desireable vacuums.
> 
>I looked at the new autovacuum in 8.1 and it appears from casual inspection
>not to have the same problem.
>
>Below is a patch for this that should apply against any 8.0.x. The change
>verifies that the catalog query returned some rows before accessing the row
>data.
>
>-dg
>
>diff -Naur source/postgresql-8.0.2/contrib/pg_autovacuum/pg_autovacuum.c build/postgresql-8.0.2/contrib/pg_autovacuum/pg_autovacuum.c
>--- source/postgresql-8.0.2/contrib/pg_autovacuum/pg_autovacuum.c	2005-04-02 16:02:03.000000000 -0800
>+++ build/postgresql-8.0.2/contrib/pg_autovacuum/pg_autovacuum.c	2005-09-28 22:15:25.428710172 -0700
>@@ -1013,6 +1013,7 @@
> static void
> perform_maintenance_command(db_info * dbi, tbl_info * tbl, int operation)
> {
>+	PGresult	*res;
> 	char		buf[256];
> 
> 	/*
>@@ -1069,10 +1070,16 @@
> 		fflush(LOGOUTPUT);
> 	}
> 
>-	send_query(buf, dbi);
>-
>-	update_table_thresholds(dbi, tbl, operation);
>-
>+	res = send_query(buf, dbi);
>+	if (PQntuples(res)) {
>+		update_table_thresholds(dbi, tbl, operation);
>+	} else {
>+		if (args->debug >= 1) {
>+			sprintf(logbuffer, "Cannot refind table %s", tbl->table_name);
>+			log_entry(logbuffer, LVL_DEBUG);
>+			fflush(LOGOUTPUT);
>+		}
>+	}
> 	if (args->debug >= 2)
> 		print_table_info(tbl);
> }
>  
>

In response to

pgsql-patches by date

Next:From: Tom LaneDate: 2005-10-20 16:06:51
Subject: Re: patch for pg_autovacuum 8.0.x prevent segv for dropped tables
Previous:From: MatthewDate: 2005-10-20 14:33:02
Subject: Re: patch for pg_autovacuum 8.0.x prevent segv for dropped

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group