From 4040629fe13c18630768fc3c5ff84b3ff3a32fdf Mon Sep 17 00:00:00 2001 From: Teodor Sigaev Date: Sat, 23 Aug 2008 10:43:58 +0000 Subject: Fix possible duplicate tuples while GiST scan. Now page is processed at once and ItemPointers are collected in memory. Remove tuple's killing by killtuple() if tuple was moved to another page - it could produce unaceptable overhead. Backpatch up to 8.1 because the bug was introduced by GiST's concurrency support. --- src/include/access/gist_private.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/include/access/gist_private.h') diff --git a/src/include/access/gist_private.h b/src/include/access/gist_private.h index 1cfa5b92bc2..c1861180d24 100644 --- a/src/include/access/gist_private.h +++ b/src/include/access/gist_private.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/gist_private.h,v 1.8 2005/10/15 02:49:42 momjian Exp $ + * $PostgreSQL: pgsql/src/include/access/gist_private.h,v 1.8.2.1 2008/08/23 10:43:58 teodor Exp $ * *------------------------------------------------------------------------- */ @@ -73,6 +73,13 @@ typedef struct GISTScanOpaqueData MemoryContext tempCxt; Buffer curbuf; Buffer markbuf; + + ItemPointerData pageData[BLCKSZ/sizeof(IndexTupleData)]; + OffsetNumber nPageData; + OffsetNumber curPageData; + ItemPointerData markPageData[BLCKSZ/sizeof(IndexTupleData)]; + OffsetNumber markNPageData; + OffsetNumber markCurPageData; } GISTScanOpaqueData; typedef GISTScanOpaqueData *GISTScanOpaque; -- cgit v1.2.3