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])