From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Michał Kłeczek <michal(at)kleczek(dot)org> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: Is it safe to cache data by GiST consistent function |
Date: | 2024-04-03 14:27:01 |
Message-ID: | 2048131.1712154421@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
=?utf-8?Q?Micha=C5=82_K=C5=82eczek?= <michal(at)kleczek(dot)org> writes:
> When implementing a GiST consistent function I found the need to cache pre-processed query across invocations.
> I am not sure if it is safe to do (or I need to perform some steps to make sure cached info is not leaked between rescans).
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.
> The comment in gistrescan says:
> /*
> * If this isn't the first time through, preserve the fn_extra
> * pointers, so that if the consistentFns are using them to cache
> * data, that data is not leaked across a rescan.
> */
> which seems to me self-contradictory as fn_extra is preserved between rescans (so leaks are indeed possible).
I think you're reading it wrong. If we cleared fn_extra during
rescan, access to the old extra value would be lost so a new one
would have to be created, leaking the old value for the rest of
the query.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2024-04-03 14:31:40 | Re: psql not responding to SIGINT upon db reconnection |
Previous Message | Tristan Partin | 2024-04-03 14:20:36 | Re: psql not responding to SIGINT upon db reconnection |