Re: [HACKERS] Surjective functional indexes - Mailing list pgsql-hackers

From Simon Riggs
Subject Re: [HACKERS] Surjective functional indexes
Date
Msg-id CANP8+jLLZvG+MDhnXsiv4Hxbh4wcOWRkC6Zu=PGg63gOFwuyyw@mail.gmail.com
Whole thread Raw
In response to Re: [HACKERS] Surjective functional indexes  (Konstantin Knizhnik <k.knizhnik@postgrespro.ru>)
Responses Re: [HACKERS] Surjective functional indexes  (Simon Riggs <simon@2ndquadrant.com>)
List pgsql-hackers
On 23 March 2018 at 15:39, Konstantin Knizhnik
<k.knizhnik@postgrespro.ru> wrote:
>
>
> On 22.03.2018 23:37, Alvaro Herrera wrote:
>>
>> The rd_projidx (list of each nth element in the index list that is a
>> projection index) thing looks odd.  Wouldn't it make more sense to have
>> a list of index OIDs that are projection indexes?
>>
>
> rd_projidx is not a list, it is Bitmapset. It is just one of many bitmap
> sets in RelationData:
>
>     Bitmapset  *rd_indexattr;    /* identifies columns used in indexes */
>     Bitmapset  *rd_keyattr;        /* cols that can be ref'd by foreign keys
> */
>     Bitmapset  *rd_pkattr;        /* cols included in primary key */
>     Bitmapset  *rd_idattr;        /* included in replica identity index */
>
> Yes, it is possible to construct Oid list of projectional indexes instead of
> having bitmap which marks some indexes in projectional, but I am not sure
> that
> it will be more efficient both from CPU and memory footprint point of view
> (in most indexes bitmap will consists of just one integer). In any case, I
> do not think that it can have some measurable impact on performance or
> memory size:
> number of indexes and especially projectional indexes will very rarely
> exceed 10.

Alvaro's comment seems reasonable to me.

The patch adds both rd_projindexattr and rd_projidx
rd_projindexattr should be a Bitmapset, but rd_projidx looks strange
now he mentions it.

Above that in RelationData we have other structures that are List of
OIDs, so Alvaro's proposal make sense.

That would simplify the code in ProjectionIsNotChanged() by just
looping over the list of projection indexes rather than the list of
indexes

So please could you make the change?

-- 
Simon Riggs                http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


pgsql-hackers by date:

Previous
From: Alvaro Herrera
Date:
Subject: Re: [HACKERS] Surjective functional indexes
Next
From: Vladimir Sitnikov
Date:
Subject: max_memory_per_backend GUC to limit backend's memory usage