diff options
Diffstat (limited to 'src/backend/access/gist/gistvacuum.c')
-rw-r--r-- | src/backend/access/gist/gistvacuum.c | 58 |
1 files changed, 7 insertions, 51 deletions
diff --git a/src/backend/access/gist/gistvacuum.c b/src/backend/access/gist/gistvacuum.c index af26fb0311f..178ef40a35d 100644 --- a/src/backend/access/gist/gistvacuum.c +++ b/src/backend/access/gist/gistvacuum.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/gist/gistvacuum.c,v 1.46 2010/01/02 16:57:34 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/access/gist/gistvacuum.c,v 1.47 2010/02/08 04:33:52 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -29,7 +29,7 @@ typedef struct GistBulkDeleteResult { IndexBulkDeleteResult std; /* common state */ - bool needFullVacuum; + bool needReindex; } GistBulkDeleteResult; typedef struct @@ -496,12 +496,8 @@ gistVacuumUpdate(GistVacuum *gv, BlockNumber blkno, bool needunion) } /* - * For usual vacuum just update FSM, for full vacuum - * reforms parent tuples if some of childs was deleted or changed, - * update invalid tuples (they can exist from last crash recovery only), - * tries to get smaller index + * VACUUM cleanup: update FSM */ - Datum gistvacuumcleanup(PG_FUNCTION_ARGS) { @@ -533,47 +529,15 @@ gistvacuumcleanup(PG_FUNCTION_ARGS) */ } - /* gistVacuumUpdate may cause hard work */ - if (info->vacuum_full) - { - GistVacuum gv; - ArrayTuple res; - - /* note: vacuum.c already acquired AccessExclusiveLock on index */ - - gv.index = rel; - initGISTstate(&(gv.giststate), rel); - gv.opCtx = createTempGistContext(); - gv.result = stats; - gv.strategy = info->strategy; - - /* walk through the entire index for update tuples */ - res = gistVacuumUpdate(&gv, GIST_ROOT_BLKNO, false); - /* cleanup */ - if (res.itup) - { - int i; - - for (i = 0; i < res.ituplen; i++) - pfree(res.itup[i]); - pfree(res.itup); - } - freeGISTstate(&(gv.giststate)); - MemoryContextDelete(gv.opCtx); - } - else if (stats->needFullVacuum) + if (stats->needReindex) ereport(NOTICE, (errmsg("index \"%s\" needs VACUUM FULL or REINDEX to finish crash recovery", RelationGetRelationName(rel)))); /* - * If vacuum full, we already have exclusive lock on the index. Otherwise, - * need lock unless it's local to this backend. + * Need lock unless it's local to this backend. */ - if (info->vacuum_full) - needLock = false; - else - needLock = !RELATION_IS_LOCAL(rel); + needLock = !RELATION_IS_LOCAL(rel); /* try to find deleted pages */ if (needLock) @@ -606,14 +570,6 @@ gistvacuumcleanup(PG_FUNCTION_ARGS) } lastBlock = npages - 1; - if (info->vacuum_full && lastFilledBlock < lastBlock) - { /* try to truncate index */ - RelationTruncate(rel, lastFilledBlock + 1); - - stats->std.pages_removed = lastBlock - lastFilledBlock; - totFreePages = totFreePages - stats->std.pages_removed; - } - /* Finally, vacuum the FSM */ IndexFreeSpaceMapVacuum(info->index); @@ -799,7 +755,7 @@ gistbulkdelete(PG_FUNCTION_ARGS) stack->next = ptr; if (GistTupleIsInvalid(idxtuple)) - stats->needFullVacuum = true; + stats->needReindex = true; } } |