Re: [PATCH] Don't block HOT update by BRIN index - Mailing list pgsql-hackers

From Tomas Vondra
Subject Re: [PATCH] Don't block HOT update by BRIN index
Date
Msg-id c9a45a90-ed8c-61c6-c04e-e23d5dbbe415@enterprisedb.com
Whole thread Raw
In response to Re: [PATCH] Don't block HOT update by BRIN index  (Tomas Vondra <tomas.vondra@enterprisedb.com>)
Responses Re: [PATCH] Don't block HOT update by BRIN index
List pgsql-hackers
OK,

I've polished the last version of the patch a bit (added a regression 
test with update of attribute in index predicate and docs about the new 
flag into indexam.sgml) and pushed.

I wonder if we could/should improve handling of index predicates. In 
particular, it seems to me we could simply ignore indexes when the new 
row does not match the index predicate. For example, if there's an index

   CREATE INDEX ON t (a) WHERE b = 1;

and the update does:

   UPDATE t SET b = 2 WHERE ...;

then we'll not add the tuple pointer to this index anyway, and we could 
simply ignore this index when considering HOT. But I might be missing 
something important about HOT ...

The main problem I see with this is it requires evaluating the index 
predicate for each tuple, which makes it incompatible with the caching 
in RelationGetIndexAttrBitmap. Just ditching the caching seems like a 
bad idea, so we'd probably have to do this in two phases:

1) Do what we do now, i.e. RelationGetIndexAttrBitmap considering all 
indexes / attributes. If this says HOT is possible, great - we're done.

2) If (1) says HOT is not possible, we need to look whether it's because 
of regular or partial index. For regular indexes it's clear, for partial 
indexes we could ignore this if the predicate evaluates to false for the 
new row.

But even if such optimization is possible, it's way out of scope of this 
patch and it's not clear to me it's actually a sensible trade-off.


regards

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



pgsql-hackers by date:

Previous
From: Jacob Champion
Date:
Subject: Re: Support for NSS as a libpq TLS backend
Next
From: Robert Haas
Date:
Subject: Re: Can I assume relation would not be invalid during from ExecutorRun to ExecutorEnd