Re: Parallel CREATE INDEX for GIN indexes - Mailing list pgsql-hackers

From Heikki Linnakangas
Subject Re: Parallel CREATE INDEX for GIN indexes
Date
Msg-id 73a28b94-43d5-4f77-b26e-0d642f6de777@iki.fi
Whole thread Raw
In response to Re: Parallel CREATE INDEX for GIN indexes  (Tomas Vondra <tomas.vondra@enterprisedb.com>)
Responses Re: Parallel CREATE INDEX for GIN indexes
List pgsql-hackers
(Replying to old thread, because I happened to spot this while looking 
at David Geier's proposal at: 
https://www.postgresql.org/message-id/5d366878-2007-4d31-861e-19294b7a583b%40gmail.com)

On 07/01/2025 13:59, Tomas Vondra wrote:
> On 1/6/25 20:13, Matthias van de Meent wrote:
>>> GinBufferInit
>>
>> This seems to depend on the btree operator classes to get sortsupport
>> functions, bypassing the GIN compare support function (support
>> function 1) and adding a dependency on the btree opclasses for
>> indexable types. This can cause "bad" ordering, or failure to build
>> the index when the parallel path is chosen and no default btree
>> opclass is defined for the type. I think it'd be better if we allowed
>> users to specify which sortsupport function to use, or at least use
>> the correct compare function when it's defined on the attribute's
>> operator class.
> 
> Good point! I fixed this by copying the logic from initGinState.

I think tuplesort_begin_index_gin() has the same issue. It does this to 
look up the comparison function:

   /*
    * Look for an ordering for the index key data type, and then the sort
    * support function.
    */
   typentry = lookup_type_cache(att->atttypid, TYPECACHE_LT_OPR);
   PrepareSortSupportFromOrderingOp(typentry->lt_opr, sortKey);

That also looks up the key type's b-tree operator rather than the GIN 
opclass's compare function.

- Heikki




pgsql-hackers by date:

Previous
From: Lukas Fittl
Date:
Subject: Re: pg_plan_advice
Next
From: Tomas Vondra
Date:
Subject: Re: Parallel CREATE INDEX for GIN indexes