diff options
Diffstat (limited to 'src/backend/access/gist')
-rw-r--r-- | src/backend/access/gist/gist.c | 5 | ||||
-rw-r--r-- | src/backend/access/gist/gistvacuum.c | 11 | ||||
-rw-r--r-- | src/backend/access/gist/gistxlog.c | 4 |
3 files changed, 10 insertions, 10 deletions
diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index 4edc5a75f28..53bccf6d185 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -466,6 +466,11 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate, */ START_CRIT_SECTION(); + /* + * While we delete only one tuple at once we could mix calls + * PageIndexTupleDelete() here and PageIndexMultiDelete() in + * gistRedoPageUpdateRecord() + */ if (OffsetNumberIsValid(oldoffnum)) PageIndexTupleDelete(page, oldoffnum); gistfillbuffer(page, itup, ntup, InvalidOffsetNumber); diff --git a/src/backend/access/gist/gistvacuum.c b/src/backend/access/gist/gistvacuum.c index 2337dbd7f9d..a0b0eebed3d 100644 --- a/src/backend/access/gist/gistvacuum.c +++ b/src/backend/access/gist/gistvacuum.c @@ -208,23 +208,20 @@ gistbulkdelete(PG_FUNCTION_ARGS) idxtuple = (IndexTuple) PageGetItem(page, iid); if (callback(&(idxtuple->t_tid), callback_state)) - { - todelete[ntodelete] = i - ntodelete; - ntodelete++; - stats->tuples_removed += 1; - } + todelete[ntodelete++] = i; else stats->num_index_tuples += 1; } + stats->tuples_removed += ntodelete; + if (ntodelete) { START_CRIT_SECTION(); MarkBufferDirty(buffer); - for (i = 0; i < ntodelete; i++) - PageIndexTupleDelete(page, todelete[i]); + PageIndexMultiDelete(page, todelete, ntodelete); GistMarkTuplesDeleted(page); if (RelationNeedsWAL(rel)) diff --git a/src/backend/access/gist/gistxlog.c b/src/backend/access/gist/gistxlog.c index fbdbb3c51f2..c63cc8190c4 100644 --- a/src/backend/access/gist/gistxlog.c +++ b/src/backend/access/gist/gistxlog.c @@ -83,13 +83,11 @@ gistRedoPageUpdateRecord(XLogReaderState *record) /* Delete old tuples */ if (xldata->ntodelete > 0) { - int i; OffsetNumber *todelete = (OffsetNumber *) data; data += sizeof(OffsetNumber) * xldata->ntodelete; - for (i = 0; i < xldata->ntodelete; i++) - PageIndexTupleDelete(page, todelete[i]); + PageIndexMultiDelete(page, todelete, xldata->ntodelete); if (GistPageIsLeaf(page)) GistMarkTuplesDeleted(page); } |