ARRRGGHH.... ok, with patch this time...

On Sat, 2003-11-29 at 00:17, Matthew T. O'Connor wrote:
> Hello, 
> 
> I noticed that there have been a few patched submitted for pg_autovacuum
> that have not been applied, so I applied them locally and tested them on
> my Fedora box.  I am resubmitting them as one single patch.
> 
> Included in the attached patch:
> 
> Brian Hurt's patch that fixed the truncate bug by referencing a table
> oid rather than it's relfilenode.
> 
> Craig Boston's patch that fixes crashes on FreeBSD related to
> uninitialized variables.
> 
> A quick patch by me to remove a log_entry call inside init_table_info()
> that was used for debugging by me during development and I left in by
> mistake.
> 
> Please apply this patch to both HEAD and 7.4.
> 
> Thanks much,
> 
> Matthew O'Connor
> 
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
> 
>                http://www.postgresql.org/docs/faqs/FAQ.html
> 
*** ./pg_autovacuum.c.orig	2003-11-29 00:03:54.000000000 -0500
--- ./pg_autovacuum.c	2003-11-29 00:04:36.000000000 -0500
***************
*** 116,126 ****
  		 atol(PQgetvalue(res, row, PQfnumber(res, "n_tup_upd"))));
  	new_tbl->curr_vacuum_count = new_tbl->CountAtLastVacuum;
  
! 	new_tbl->relfilenode = atoi(PQgetvalue(res, row, PQfnumber(res, "relfilenode")));
  	new_tbl->reltuples = atoi(PQgetvalue(res, row, PQfnumber(res, "reltuples")));
  	new_tbl->relpages = atoi(PQgetvalue(res, row, PQfnumber(res, "relpages")));
  
- 	log_entry(PQgetvalue(res, row, PQfnumber(res, "relisshared")));
  	if (strcmp("t", PQgetvalue(res, row, PQfnumber(res, "relisshared"))))
  		new_tbl->relisshared = 0;
  	else
--- 116,125 ----
  		 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")));
  
  	if (strcmp("t", PQgetvalue(res, row, PQfnumber(res, "relisshared"))))
  		new_tbl->relisshared = 0;
  	else
***************
*** 154,160 ****
  
  	if (dbi->conn != NULL)
  	{
! 		snprintf(query, sizeof(query), PAGES_QUERY, tbl->relfilenode);
  		res = send_query(query, dbi);
  		if (res != NULL)
  		{
--- 153,159 ----
  
  	if (dbi->conn != NULL)
  	{
! 		snprintf(query, sizeof(query), PAGES_QUERY, tbl->relid);
  		res = send_query(query, dbi);
  		if (res != NULL)
  		{
***************
*** 237,243 ****
  			for (i = 0; i < t; i++)
  			{					/* loop through result set looking for a
  								 * match */
! 				if (tbl->relfilenode == atoi(PQgetvalue(res, i, PQfnumber(res, "relfilenode"))))
  				{
  					found_match = 1;
  					break;
--- 236,242 ----
  			for (i = 0; i < t; i++)
  			{					/* loop through result set looking for a
  								 * match */
! 				if (tbl->relid == atoi(PQgetvalue(res, i, PQfnumber(res, "oid"))))
  				{
  					found_match = 1;
  					break;
***************
*** 267,273 ****
  			while (tbl_elem != NULL)
  			{
  				tbl = ((tbl_info *) DLE_VAL(tbl_elem));
! 				if (tbl->relfilenode == atoi(PQgetvalue(res, i, PQfnumber(res, "relfilenode"))))
  				{
  					found_match = 1;
  					break;
--- 266,272 ----
  			while (tbl_elem != NULL)
  			{
  				tbl = ((tbl_info *) DLE_VAL(tbl_elem));
! 				if (tbl->relid == atoi(PQgetvalue(res, i, PQfnumber(res, "oid"))))
  				{
  					found_match = 1;
  					break;
***************
*** 361,367 ****
  {
  	sprintf(logbuffer, "  table name:     %s.%s", tbl->dbi->dbname, tbl->table_name);
  	log_entry(logbuffer);
! 	sprintf(logbuffer, "     relfilenode: %i;   relisshared: %i", tbl->relfilenode, tbl->relisshared);
  	log_entry(logbuffer);
  	sprintf(logbuffer, "     reltuples: %i;  relpages: %i", tbl->reltuples, tbl->relpages);
  	log_entry(logbuffer);
--- 360,366 ----
  {
  	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);
  	log_entry(logbuffer);
  	sprintf(logbuffer, "     reltuples: %i;  relpages: %i", tbl->reltuples, tbl->relpages);
  	log_entry(logbuffer);
***************
*** 1072,1078 ****
  						{		/* Loop through tables in list */
  							tbl = ((tbl_info *) DLE_VAL(tbl_elem));		/* set tbl_info =
  																		 * current_table */
! 							if (tbl->relfilenode == atoi(PQgetvalue(res, j, PQfnumber(res, "relfilenode"))))
  							{
  								tbl->curr_analyze_count =
  									(atol(PQgetvalue(res, j, PQfnumber(res, "n_tup_ins"))) +
--- 1071,1077 ----
  						{		/* 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"))))
  							{
  								tbl->curr_analyze_count =
  									(atol(PQgetvalue(res, j, PQfnumber(res, "n_tup_ins"))) +
*** ./pg_autovacuum.h.orig	2003-11-29 00:03:17.000000000 -0500
--- ./pg_autovacuum.h	2003-11-29 00:04:00.000000000 -0500
***************
*** 34,43 ****
  #define VACUUM_ANALYZE		0
  #define ANALYZE_ONLY		1
  
! #define TABLE_STATS_QUERY	"select a.relfilenode,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.relfilenode=b.relid and a.relkind = 'r'"
  
  #define FRONTEND
! #define PAGES_QUERY "select relfilenode,reltuples,relpages from pg_class where relfilenode=%i"
  #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'"
  
--- 34,43 ----
  #define VACUUM_ANALYZE		0
  #define ANALYZE_ONLY		1
  
! #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 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'"
  
***************
*** 84,90 ****
  {
  	char	   *schema_name,
  			   *table_name;
! 	int			relfilenode,
  				reltuples,
  				relisshared,
  				relpages;
--- 84,90 ----
  {
  	char	   *schema_name,
  			   *table_name;
! 	int			relid,
  				reltuples,
  				relisshared,
  				relpages;
---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
    (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED])

Reply via email to