Thread: GIN index

GIN index

From
"huangning290@yahoo.com"
Date:
Hi:
I created a new variable-length data type, and now I want to create a GIN index for it. According to the rules of GIN index, I created three functions: extractValue, extractQuery, and compare. I made sure that the return value of the first two functions is the address of the array, but when using the index query, the GIN tuple data obtained by calling PG_GETARG_DATUM in the compare function is incorrect, and it is misplaced! In memory the size of the data header becomes something else, and the position of the first byte is not the header, it becomes the fourth byte. So there is a high probability that the function called is wrong or my return value is wrong when creating the index or the error is somewhere else? 

regards!

Re: GIN index

From
Julien Rouhaud
Date:
Hi,

On Tue, Jan 25, 2022 at 02:42:14AM +0000, huangning290@yahoo.com wrote:
> Hi:I created a new variable-length data type, and now I want to create a GIN
> index for it. According to the rules of GIN index, I created three functions:
> extractValue, extractQuery, and compare. I made sure that the return value of
> the first two functions is the address of the array, but when using the index
> query, the GIN tuple data obtained by calling PG_GETARG_DATUM in the compare
> function is incorrect, and it is misplaced! In memory the size of the data
> header becomes something else, and the position of the first byte is not the
> header, it becomes the fourth byte. So there is a high probability that the
> function called is wrong or my return value is wrong when creating the index
> or the error is somewhere else?

It's hard to have an opinion without seeing any code extract.  Have you checked
contrib module for examples of other GIN opclasses, like pg_trgrm, or hstore
for varlena datatype with GIN support?

Note also that pgsql-hackers is probably a better mailing list for this kind of
questions.