Re: index support for arrays (GiST) - Mailing list pgsql-hackers

From Oleg Bartunov
Subject Re: index support for arrays (GiST)
Date
Msg-id Pine.GSO.3.96.SK.1001215140503.20670O-100000@ra
Whole thread Raw
In response to index support for arrays (GiST)  (Oleg Bartunov <oleg@sai.msu.su>)
List pgsql-hackers
Well,

we found an answer ourserlves. Patch for 7.0.3 is included below.
Credits to Teodor Sigaev (teodor@stack.net)
Some comments: 

From src/backend/access/gist/gist.c
/*
** Take a compressed entry, and install it on a page.  Since we now know
** where the entry will live, we decompress it and recompress it using
** that knowledge (some compression routines may want to fish around
** on the page, for example, or do something special for leaf nodes.)
*/

After compressing of index it's written to disk decompressed (!) which
is the reason we have the problem with broken index !
It looks like other people just didn't use index decompression function
(at least in Gene's code decompression function just do return  ) and 
that's why this bug was not discovered. We could make a patch for 
upcoming 7.1 if hackers desired. I consider this patch as a bugfix
not a new feature or improvement. We got a very promising results.

Another question to this code is - why gistPageAddItem does
compress - decompress - compress. It's not clear from the comment.
Best regards,
    Oleg

-------------------------------------------------------------------------
maze% diff -c backend/access/gist/gist.c 
backend/access/gist/gist.c.orig  
*** backend/access/gist/gist.c  Fri Dec 15 13:03:40 2000
--- backend/access/gist/gist.c.orig     Fri Dec 15 13:00:50 2000
***************
*** 374,380 **** {       GISTENTRY       tmpcentry;       IndexTuple      itup = (IndexTuple) item;
-       OffsetNumber    retval;        /*        * recompress the item given that we now know the exact page and
--- 374,379 ----
***************
*** 386,400 ****                                  IndexTupleSize(itup) -
sizeof(IndexTupleData), FALSE);       gistcentryinit(giststate, &tmpcentry, dentry->pred, r, page,
           offsetNumber, dentry->bytes, FALSE);
 
!       *newtup = gist_tuple_replacekey(r, tmpcentry, itup);
!       retval = PageAddItem(page, (Item) *newtup,
IndexTupleSize(*newtup),
!                                               offsetNumber, flags);       /* be tidy */       if (tmpcentry.pred !=
dentry->pred              && tmpcentry.pred != (((char *) itup) +
 
sizeof(IndexTupleData)))               pfree(tmpcentry.pred); 
!       return (retval); }  
--- 385,398 ----                                  IndexTupleSize(itup) -
sizeof(IndexTupleData), FALSE);       gistcentryinit(giststate, &tmpcentry, dentry->pred, r, page,
           offsetNumber, dentry->bytes, FALSE);
 
!       *newtup = gist_tuple_replacekey(r, *dentry, itup);       /* be tidy */       if (tmpcentry.pred != dentry->pred
             && tmpcentry.pred != (((char *) itup) +
 
sizeof(IndexTupleData)))               pfree(tmpcentry.pred); 
!       return (PageAddItem(page, (Item) *newtup,
IndexTupleSize(*newtup),
!                                               offsetNumber, flags)); } 

-----------------------------------------------------------------------



On Wed, 13 Dec 2000, Oleg Bartunov wrote:

> Date: Wed, 13 Dec 2000 18:48:40 +0300 (GMT)
> From: Oleg Bartunov <oleg@sai.msu.su>
> To: selkovjr@mcs.anl.gov
> Cc: Tom Lane <tgl@sss.pgh.pa.us>, vmikheev@SECTORBASE.COM,
>     'pgsql-hackers ' <pgsql-hackers@postgresql.org>
> Subject: [HACKERS] index support for arrays (GiST)
> 
> Hi,
> 
> we are getting a bit close to add index support for int arrays using
> GiST interface. This will really drive up performance of our full text
> search fully based on postgresql. We have a problem with broken index
> and couldn't find a reason. I attached archive with sources
> for GiST functions and test suite to show a problem - vacuum analyze
> at end end of TESTSQL should complain about broken index.
> Here is a short description:
> 1. untar in contrib 7.0.*
> 2. cd _intarray
> 3. edit Makefile for TESTDB (name of db for test)
> 4. createdb TESTDB
> 5. gmake
> 6. gmake install
> 7. psql TESTDB < TESTSQL
> 
>     Regards,
> 
>         Oleg
> _____________________________________________________________
> Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
> Sternberg Astronomical Institute, Moscow University (Russia)
> Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
> phone: +007(095)939-16-83, +007(095)939-23-83
> 

_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83





pgsql-hackers by date:

Previous
From: Zeugswetter Andreas SB
Date:
Subject: heap page corruption not easy
Next
From: Thomas Lockhart
Date:
Subject: Re: index support for arrays (GiST)