Re: [PATCH] Don't block HOT update by BRIN index

Tomas Vondra <tomas.vondra@enterprisedb.com>

From: Tomas Vondra <tomas.vondra@enterprisedb.com>
To: Josef Šimánek <josef.simanek@gmail.com>, Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2021-06-29T23:20:01Z
Lists: pgsql-hackers

On 6/30/21 12:53 AM, Josef Šimánek wrote:
> st 30. 6. 2021 v 0:31 odesílatel Josef Šimánek <josef.simanek@gmail.com> napsal:
>>
>> Hello!
>>
>> Tomáš Vondra has shared a few ideas to improve BRIN index in czech
>> PostgreSQL mail list some time ago [1 , in czech only]. This is first
>> try to implement one of those ideas.
>>
>> Currently BRIN index blocks HOT update even it is not linked tuples
>> directly. I'm attaching the initial patch allowing HOT update even on
>> BRIN indexed columns. This patch went through an initial review on
>> czech PostgreSQL mail list [1].
> 
> I just found out current patch is breaking partial-index isolation
> test. I'm looking into this problem.
> 

The problem is in RelationGetIndexAttrBitmap - the existing code first 
walks indnatts, and builds the indexattrs / hotblockingattrs. But then 
it also inspects expressions and the predicate (by pull_varattnos), and 
the patch fails to do that for hotblockingattrs. Which is why it fails 
for partial-index, because that uses an index with a predicate.

So there needs to be something like:

     if (indexDesc->rd_indam->amhotblocking)
         pull_varattnos(indexExpressions, 1, &hotblockingattrs);

     if (indexDesc->rd_indam->amhotblocking)
         pull_varattnos(indexPredicate, 1, &hotblockingattrs);

This fixes the failure for me.

regards

-- 
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Ignore BRIN indexes when checking for HOT updates

  2. Move test for BRIN HOT behavior to stats.sql

  3. Ignore BRIN indexes when checking for HOT udpates