Re: BUG #17213: Wrong result from a query involving Merge Semi Join and Memoize

David Rowley <dgrowleyml@gmail.com>

From: David Rowley <dgrowleyml@gmail.com>
To: Elvis Pranskevichus <elprans@gmail.com>, PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>
Date: 2021-11-24T01:58:30Z
Lists: pgsql-bugs
On Mon, 22 Nov 2021 at 23:36, David Rowley <dgrowleyml@gmail.com> wrote:
>
> On Tue, 26 Oct 2021 at 20:50, David Rowley <dgrowleyml@gmail.com> wrote:
> > An alternative way to fix the problem would be just to flush the cache
> > whenever a Param changes that is not part of the cache key. The
> > Materalize node works a bit like this, except it'll just flush the
> > cache whenever a param changes, since the Material cache is not
> > parameterized.   One fairly hefty drawback with doing it this way is
> > that the planner does not get a chance to take into account the fact
> > that the cache could be flushed quite often.  This could result in a
> > Nested Loop / Memoize join being chosen instead of a Hash or Merge
> > Join when the hash or merge join would be much more favourable. Let's
> > call this "option 2".
>
> I'm planning on giving the patch I submitted another look with the
> intention of pushing it tomorrow.

Pushed with the addition of a test to exercise the cache flushing code.

Thanks for reporting this.

David



Commits

  1. Flush Memoize cache when non-key parameters change, take 2

  2. Flush Memoize cache when non-key parameters change