Re: "type with xxxx does not exist" when doing ExecMemoize()

Tender Wang <tndrwang@gmail.com>

From: Tender Wang <tndrwang@gmail.com>
To: Andrei Lepikhov <a.lepikhov@postgrespro.ru>
Cc: pgsql-bugs@lists.postgresql.org
Date: 2024-02-26T08:14:39Z
Lists: pgsql-bugs, pgsql-hackers
Andrei Lepikhov <a.lepikhov@postgrespro.ru> 于2024年2月26日周一 10:57写道:

> On 25/2/2024 20:32, Tender Wang wrote:
> > I think in prepare_probe_slot(), should called datumCopy as the attached
> > patch does.
> >
> > Any thoughts? Thanks.
> Thanks for the report.
> I think it is better to invent a Runtime Memory Context; likewise, it is
> already designed in IndexScan and derivatives. Here, you just allocate
> the value in some upper memory context.
>


> Also, I'm curious why such a trivial error hasn't been found for a long
> time
>

  I analyze this issue again. I found that the forms of qual in
Memoize.sql(regress) are all like this:

  table1.c0 OP table2.c0
If table2.c0 is the param value, the probeslot->tts_values[i] just store
the pointer.  The memorycontext of this pointer is
ExecutorContext not ExprContext, Reset ExprContext doesn't change the data
of probeslot->tts_values[i].
So such a trivial error hasn't been found before.

-- 
> regards,
> Andrei Lepikhov
> Postgres Professional
>
>

-- 
Tender Wang
OpenPie:  https://en.openpie.com/

Commits

  1. Fix incorrect accessing of pfree'd memory in Memoize

  2. Fix memory leak in Memoize code