From cb4292ea64749a3faf2a2b6ec737576a39e83f6a Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 7 Oct 1998 22:31:50 +0000 Subject: [PATCH] vacuum cleanups --- src/backend/commands/vacuum.c | 38 +++++++++-------------------------- 1 file changed, 9 insertions(+), 29 deletions(-) diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index c422de9867..1c6793241b 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.83 1998/10/07 17:12:50 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.84 1998/10/07 22:31:50 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -306,26 +306,11 @@ vc_getrels(NameData *VacRelP) d = heap_getattr(tuple, Anum_pg_class_relname, tupdesc, &n); rname = (char *) d; - /* - * don't vacuum large objects for now - something breaks when we - * do - */ - if ((strlen(rname) >= 5) && rname[0] == 'x' && - rname[1] == 'i' && rname[2] == 'n' && - (rname[3] == 'v' || rname[3] == 'x') && - rname[4] >= '0' && rname[4] <= '9') - { - elog(NOTICE, "Rel %s: can't vacuum LargeObjects now", - rname); - continue; - } - d = heap_getattr(tuple, Anum_pg_class_relkind, tupdesc, &n); rkind = DatumGetChar(d); - /* skip system relations */ - if (rkind != 'r') + if (rkind != RELKIND_RELATION) { elog(NOTICE, "Vacuum: can not process index and certain system tables"); continue; @@ -372,8 +357,6 @@ vc_getrels(NameData *VacRelP) static void vc_vacone(Oid relid, bool analyze, List *va_cols) { - Relation rel; - TupleDesc tupdesc; HeapTuple tuple, typetuple; Relation onerel; @@ -389,9 +372,6 @@ vc_vacone(Oid relid, bool analyze, List *va_cols) StartTransactionCommand(); - rel = heap_openr(RelationRelationName); - tupdesc = RelationGetDescr(rel); - /* * Race condition -- if the pg_class tuple has gone away since the * last time we saw it, we don't need to vacuum it. @@ -401,7 +381,6 @@ vc_vacone(Oid relid, bool analyze, List *va_cols) 0, 0, 0); if (!HeapTupleIsValid(tuple)) { - heap_close(rel); CommitTransactionCommand(); return; } @@ -573,7 +552,6 @@ vc_vacone(Oid relid, bool analyze, List *va_cols) /* all done with this class */ heap_close(onerel); - heap_close(rel); /* update statistics in pg_class */ vc_updstats(vacrelstats->relid, vacrelstats->num_pages, @@ -1744,6 +1722,7 @@ vc_updstats(Oid relid, int num_pages, int num_tuples, bool hasindex, VRelStats * sd; HeapScanDesc scan; HeapTuple rtup, + ctup, atup, stup; Form_pg_class pgcform; @@ -1754,18 +1733,19 @@ vc_updstats(Oid relid, int num_pages, int num_tuples, bool hasindex, VRelStats * /* * update number of tuples and number of pages in pg_class */ - rtup = SearchSysCacheTuple(RELOID, + ctup = SearchSysCacheTupleCopy(RELOID, ObjectIdGetDatum(relid), 0, 0, 0); - if (!HeapTupleIsValid(rtup)) + if (!HeapTupleIsValid(ctup)) elog(ERROR, "pg_class entry for relid %d vanished during vacuuming", relid); rd = heap_openr(RelationRelationName); /* get the buffer cache tuple */ - rtup = heap_fetch(rd, SnapshotNow, &rtup->t_ctid, &buffer); - + rtup = heap_fetch(rd, SnapshotNow, &ctup->t_ctid, &buffer); + pfree(ctup); + /* overwrite the existing statistics in the tuple */ vc_setpagelock(rd, ItemPointerGetBlockNumber(&rtup->t_ctid)); pgcform = (Form_pg_class) GETSTRUCT(rtup); @@ -2175,7 +2155,7 @@ vc_getindices(Oid relid, int *nindices, Relation **Irel) k++; } else - elog(NOTICE, "CAN't OPEN INDEX %u - SKIP IT", ioid[i]); + elog(NOTICE, "CAN'T OPEN INDEX %u - SKIP IT", ioid[i]); } *nindices = k; pfree(ioid);