pgsql: Fix planner's use of Result Cache with unique joins - Mailing list pgsql-committers

From David Rowley
Subject pgsql: Fix planner's use of Result Cache with unique joins
Date
Msg-id E1lkJA3-0007te-6H@gemulon.postgresql.org
Whole thread Raw
Responses Re: pgsql: Fix planner's use of Result Cache with unique joins  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-committers
Fix planner's use of Result Cache with unique joins

When the planner considered using a Result Cache node to cache results
from the inner side of a Nested Loop Join, it failed to consider that the
inner path's parameterization may not be the entire join condition.  If
the join was marked as inner_unique then we may accidentally put the cache
in singlerow mode.  This meant that entries would be marked as complete
after caching the first row.  That was wrong as if only part of the join
condition was parameterized then the uniqueness of the unique join was not
guaranteed at the Result Cache's level.  The uniqueness is only guaranteed
after Nested Loop applies the join filter.  If subsequent rows were found,
this would lead to:

ERROR: cache entry already complete

This could have been fixed by only putting the cache in singlerow mode if
the entire join condition was parameterized.  However, Nested Loop will
only read its inner side so far as the first matching row when the join is
unique, so that might mean we never get an opportunity to mark cache
entries as complete.  Since non-complete cache entries are useless for
subsequent lookups, we just don't bother considering a Result Cache path
in this case.

In passing, remove the XXX comment that claimed the above ERROR might be
better suited to be an Assert.  After there being an actual case which
triggered it, it seems better to keep it an ERROR.

Reported-by: David Christensen
Discussion: https://postgr.es/m/CAOxo6X+dy-V58iEPFgst8ahPKEU+38NZzUuc+a7wDBZd4TrHMQ@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/9e215378d7fbb7d4615be917917c52f246cc6c61

Modified Files
--------------
src/backend/executor/nodeResultCache.c |  2 +-
src/backend/optimizer/path/joinpath.c  | 31 +++++++++++++++++++++++++++++++
2 files changed, 32 insertions(+), 1 deletion(-)


pgsql-committers by date:

Previous
From: Bruce Momjian
Date:
Subject: pgsql: doc: complete adding XML markup to PG 14 relnotes
Next
From: Tom Lane
Date:
Subject: pgsql: Remove plpgsql's special-case code paths for SET/RESET.