pgsql: Check lateral references within PHVs for memoize cache keys

Поиск
Список
Период
Сортировка
От Richard Guo
Тема pgsql: Check lateral references within PHVs for memoize cache keys
Дата
Msg-id E1sTAUz-001h94-Vk@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Check lateral references within PHVs for memoize cache keys

If we intend to generate a Memoize node on top of a path, we need
cache keys of some sort.  Currently we search for the cache keys in
the parameterized clauses of the path as well as the lateral_vars of
its parent.  However, it turns out that this is not sufficient because
there might be lateral references derived from PlaceHolderVars, which
we fail to take into consideration.

This oversight can cause us to miss opportunities to utilize the
Memoize node.  Moreover, in some plans, failing to recognize all the
cache keys could result in performance regressions.  This is because
without identifying all the cache keys, we would need to purge the
entire cache every time we get a new outer tuple during execution.

This patch fixes this issue by extracting lateral Vars from within
PlaceHolderVars and subsequently including them in the cache keys.

In passing, this patch also includes a comment clarifying that Memoize
nodes are currently not added on top of join relation paths.  This
explains why this patch only considers PlaceHolderVars that are due to
be evaluated at baserels.

Author: Richard Guo
Reviewed-by: Tom Lane, David Rowley, Andrei Lepikhov
Discussion: https://postgr.es/m/CAMbWs48jLxn0pAPZpJ50EThZ569Xrw+=4Ac3QvkpQvNszbeoNg@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/069d0ff0226b9ac999030b894db8defd4df186e0

Modified Files
--------------
contrib/postgres_fdw/expected/postgres_fdw.out |  12 ++-
src/backend/optimizer/path/joinpath.c          | 114 +++++++++++++++++++++++--
src/test/regress/expected/memoize.out          |  93 ++++++++++++++++++++
src/test/regress/sql/memoize.sql               |  35 ++++++++
4 files changed, 245 insertions(+), 9 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: pgsql: Avoid unhelpful internal error for incorrect recursive-WITH quer
Следующее
От: Fujii Masao
Дата:
Сообщение: pgsql: Fix tablespace handling in MERGE/SPLIT partition commands.