diff --git a/contrib/pg_autovacuum/pg_autovacuum.c b/contrib/pg_autovacuum/pg_autovacuum.c
index 4b48d467a002349fcebb664a74743f71b1ac3c96..3cdd286de1ed9c38b0274930661af98db4689395 100644
--- a/contrib/pg_autovacuum/pg_autovacuum.c
+++ b/contrib/pg_autovacuum/pg_autovacuum.c
@@ -117,9 +117,9 @@ init_table_info(PGresult *res, int row, db_info * dbi)
 		 atol(PQgetvalue(res, row, PQfnumber(res, "n_tup_upd"))));
 	new_tbl->curr_vacuum_count = new_tbl->CountAtLastVacuum;
 
-	new_tbl->relid = atoi(PQgetvalue(res, row, PQfnumber(res, "oid")));
-	new_tbl->reltuples = atoi(PQgetvalue(res, row, PQfnumber(res, "reltuples")));
-	new_tbl->relpages = atoi(PQgetvalue(res, row, PQfnumber(res, "relpages")));
+	new_tbl->relid = atooid(PQgetvalue(res, row, PQfnumber(res, "oid")));
+	new_tbl->reltuples = atof(PQgetvalue(res, row, PQfnumber(res, "reltuples")));
+	new_tbl->relpages = atooid(PQgetvalue(res, row, PQfnumber(res, "relpages")));
 
 	if (strcmp("t", PQgetvalue(res, row, PQfnumber(res, "relisshared"))))
 		new_tbl->relisshared = 0;
@@ -159,8 +159,8 @@ update_table_thresholds(db_info * dbi, tbl_info * tbl, int vacuum_type)
 		if (res != NULL)
 		{
 			tbl->reltuples =
-				atoi(PQgetvalue(res, 0, PQfnumber(res, "reltuples")));
-			tbl->relpages = atoi(PQgetvalue(res, 0, PQfnumber(res, "relpages")));
+				atof(PQgetvalue(res, 0, PQfnumber(res, "reltuples")));
+			tbl->relpages = atooid(PQgetvalue(res, 0, PQfnumber(res, "relpages")));
 
 			/*
 			 * update vacuum thresholds only of we just did a vacuum
@@ -237,7 +237,7 @@ update_table_list(db_info * dbi)
 			for (i = 0; i < t; i++)
 			{					/* loop through result set looking for a
 								 * match */
-				if (tbl->relid == atoi(PQgetvalue(res, i, PQfnumber(res, "oid"))))
+				if (tbl->relid == atooid(PQgetvalue(res, i, PQfnumber(res, "oid"))))
 				{
 					found_match = 1;
 					break;
@@ -267,7 +267,7 @@ update_table_list(db_info * dbi)
 			while (tbl_elem != NULL)
 			{
 				tbl = ((tbl_info *) DLE_VAL(tbl_elem));
-				if (tbl->relid == atoi(PQgetvalue(res, i, PQfnumber(res, "oid"))))
+				if (tbl->relid == atooid(PQgetvalue(res, i, PQfnumber(res, "oid"))))
 				{
 					found_match = 1;
 					break;
@@ -361,9 +361,9 @@ print_table_info(tbl_info * tbl)
 {
 	sprintf(logbuffer, "  table name:     %s.%s", tbl->dbi->dbname, tbl->table_name);
 	log_entry(logbuffer);
-	sprintf(logbuffer, "     relid: %i;   relisshared: %i", tbl->relid, tbl->relisshared);
+	sprintf(logbuffer, "     relid: %u;   relisshared: %i", tbl->relid, tbl->relisshared);
 	log_entry(logbuffer);
-	sprintf(logbuffer, "     reltuples: %i;  relpages: %i", tbl->reltuples, tbl->relpages);
+	sprintf(logbuffer, "     reltuples: %f;  relpages: %u", tbl->reltuples, tbl->relpages);
 	log_entry(logbuffer);
 	sprintf(logbuffer, "     curr_analyze_count:  %li; cur_delete_count:   %li",
 			tbl->curr_analyze_count, tbl->curr_vacuum_count);
@@ -407,8 +407,8 @@ init_db_list()
 	if (dbs->conn != NULL)
 	{
 		res = send_query(FROZENOID_QUERY, dbs);
-		dbs->oid = atoi(PQgetvalue(res, 0, PQfnumber(res, "oid")));
-		dbs->age = atoi(PQgetvalue(res, 0, PQfnumber(res, "age")));
+		dbs->oid = atooid(PQgetvalue(res, 0, PQfnumber(res, "oid")));
+		dbs->age = atol(PQgetvalue(res, 0, PQfnumber(res, "age")));
 		if (res)
 			PQclear(res);
 
@@ -421,7 +421,7 @@ init_db_list()
 /* Simple function to create an instance of the dbinfo struct
 	Initalizes all the pointers and connects to the database  */
 db_info *
-init_dbinfo(char *dbname, int oid, int age)
+init_dbinfo(char *dbname, Oid oid, long age)
 {
 	db_info    *newdbinfo = (db_info *) malloc(sizeof(db_info));
 
@@ -500,7 +500,7 @@ update_db_list(Dllist *db_list)
 			for (i = 0; i < t; i++)
 			{					/* loop through result set looking for a
 								 * match */
-				if (dbi->oid == atoi(PQgetvalue(res, i, PQfnumber(res, "oid"))))
+				if (dbi->oid == atooid(PQgetvalue(res, i, PQfnumber(res, "oid"))))
 				{
 					found_match = 1;
 
@@ -508,7 +508,7 @@ update_db_list(Dllist *db_list)
 					 * update the dbi->age so that we ensure
 					 * xid_wraparound won't happen
 					 */
-					dbi->age = atoi(PQgetvalue(res, i, PQfnumber(res, "age")));
+					dbi->age = atol(PQgetvalue(res, i, PQfnumber(res, "age")));
 					break;
 				}
 			}
@@ -536,7 +536,7 @@ update_db_list(Dllist *db_list)
 			while (db_elem != NULL)
 			{
 				dbi = ((db_info *) DLE_VAL(db_elem));
-				if (dbi->oid == atoi(PQgetvalue(res, i, PQfnumber(res, "oid"))))
+				if (dbi->oid == atooid(PQgetvalue(res, i, PQfnumber(res, "oid"))))
 				{
 					found_match = 1;
 					break;
@@ -548,8 +548,8 @@ update_db_list(Dllist *db_list)
 			{
 				DLAddTail(db_list, DLNewElem(init_dbinfo
 						  (PQgetvalue(res, i, PQfnumber(res, "datname")),
-						 atoi(PQgetvalue(res, i, PQfnumber(res, "oid"))),
-					  atoi(PQgetvalue(res, i, PQfnumber(res, "age"))))));
+						 atooid(PQgetvalue(res, i, PQfnumber(res, "oid"))),
+					  atol(PQgetvalue(res, i, PQfnumber(res, "age"))))));
 				if (args->debug >= 1)
 				{
 					sprintf(logbuffer, "added database: %s", ((db_info *) DLE_VAL(DLGetTail(db_list)))->dbname);
@@ -681,7 +681,7 @@ print_db_info(db_info * dbi, int print_tbl_list)
 	sprintf(logbuffer, "dbname: %s Username %s Passwd %s", dbi->dbname,
 			dbi->username, dbi->password);
 	log_entry(logbuffer);
-	sprintf(logbuffer, " oid %i InsertThresh: %i  DeleteThresh: %i", dbi->oid,
+	sprintf(logbuffer, " oid %u InsertThresh: %li  DeleteThresh: %li", dbi->oid,
 			dbi->analyze_threshold, dbi->vacuum_threshold);
 	log_entry(logbuffer);
 	if (dbi->conn != NULL)
@@ -1072,7 +1072,7 @@ main(int argc, char *argv[])
 						{		/* Loop through tables in list */
 							tbl = ((tbl_info *) DLE_VAL(tbl_elem));		/* set tbl_info =
 																		 * current_table */
-							if (tbl->relid == atoi(PQgetvalue(res, j, PQfnumber(res, "oid"))))
+							if (tbl->relid == atooid(PQgetvalue(res, j, PQfnumber(res, "oid"))))
 							{
 								tbl->curr_analyze_count =
 									(atol(PQgetvalue(res, j, PQfnumber(res, "n_tup_ins"))) +
diff --git a/contrib/pg_autovacuum/pg_autovacuum.h b/contrib/pg_autovacuum/pg_autovacuum.h
index 308ebdf7ffdddf18d6c5be9a3916181feab9e7c1..86cd64b2d7deca21babdcafbe2f69544e75d6d7f 100644
--- a/contrib/pg_autovacuum/pg_autovacuum.h
+++ b/contrib/pg_autovacuum/pg_autovacuum.h
@@ -37,10 +37,13 @@
 #define TABLE_STATS_QUERY	"select a.oid,a.relname,a.relnamespace,a.relpages,a.relisshared,a.reltuples,b.schemaname,b.n_tup_ins,b.n_tup_upd,b.n_tup_del from pg_class a, pg_stat_all_tables b where a.oid=b.relid and a.relkind = 'r'"
 
 #define FRONTEND
-#define PAGES_QUERY "select oid,reltuples,relpages from pg_class where oid=%i"
+#define PAGES_QUERY "select oid,reltuples,relpages from pg_class where oid=%u"
 #define FROZENOID_QUERY "select oid,age(datfrozenxid) from pg_database where datname = 'template1'"
 #define FROZENOID_QUERY2 "select oid,datname,age(datfrozenxid) from pg_database where datname!='template0'"
 
+/* define atooid */
+#define atooid(x)  ((Oid) strtoul((x), NULL, 10))
+
 /* define cmd_args stucture */
 struct cmdargs
 {
@@ -67,9 +70,9 @@ cmd_args   *args;
 	I think we need to guarantee this happens approx every 1Million TX's  */
 struct dbinfo
 {
-	int			oid,
-				age;
-	int			analyze_threshold,
+	Oid			oid;
+	long		age;
+	long		analyze_threshold,
 				vacuum_threshold;		/* Use these as defaults for table
 										 * thresholds */
 	PGconn	   *conn;
@@ -84,9 +87,9 @@ struct tableinfo
 {
 	char	   *schema_name,
 			   *table_name;
-	int			relid,
-				reltuples,
-				relisshared,
+	float		reltuples;
+	int			relisshared;
+	Oid			relid,
 				relpages;
 	long		analyze_threshold,
 				vacuum_threshold;
@@ -111,7 +114,7 @@ static void usage(void);
 
 /* Functions for managing database lists */
 static Dllist *init_db_list(void);
-static db_info *init_dbinfo(char *dbname, int oid, int age);
+static db_info *init_dbinfo(char *dbname, Oid oid, long age);
 static void update_db_list(Dllist *db_list);
 static void remove_db_from_list(Dlelem *db_to_remove);
 static void print_db_info(db_info * dbi, int print_table_list);