=?utf-8?Q?Micha=C5=82_K=C5=82eczek?= <mic...@kleczek.org> writes:
> On 3 Apr 2024, at 16:27, Tom Lane <t...@sss.pgh.pa.us> wrote:
>> AFAIK it works.  I don't see any of the in-core ones doing so,
>> but at least range_gist_consistent and multirange_gist_consistent
>> are missing a bet by repeating their cache search every time.

> pg_trgm consistent caches tigrams but it has some logic to make sure cached 
> values are recalculated:

>       cache = (gtrgm_consistent_cache *) fcinfo->flinfo->fn_extra;
>       if (cache == NULL ||
>               cache->strategy != strategy ||
>               VARSIZE(cache->query) != querysize ||
>               memcmp((char *) cache->query, (char *) query, querysize) != 0)

> What I don’t understand is if it is necessary or it is enough to check 
> fn_extra==NULL.

Ah, I didn't think to search contrib.  Yes, you need to validate the
cache entry.  In this example, a rescan could insert a new query
value.  In general, an opclass support function could get called using
a pretty long-lived FunctionCallInfo (e.g. one in the index's relcache
entry), so it's unwise to assume that cached data is relevant to the
current call without checking.

                        regards, tom lane


Reply via email to