pgsql: Prevent join removal from removing the query's result relation.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Prevent join removal from removing the query's result relation.
Дата
Msg-id E1pUCcV-0028io-B7@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Prevent join removal from removing the query's result relation.

This was not something that required consideration before MERGE
was invented; but MERGE builds a join tree that left-joins to the
result relation, meaning that remove_useless_joins will consider
removing it.  That should generally be stopped by the query's use
of output variables from the result relation.  However, if the
result relation is inherited (e.g. a partitioned table) then
we don't add any row identity variables to the query until
expand_inherited_rtentry, which happens after join removal.

This was exposed as of commit 3c569049b, which made it possible
to deduce that a partitioned table could contain at most one row
matching a join key, enabling removal of the not-yet-expanded
result relation.  Ooops.

To fix, let's just teach join_is_removable that the query result
rel is never removable.  It's a cheap enough test in any case,
and it'll save some cycles that we'd otherwise expend in proving
that it's not removable, even in the cases we got right.

Back-patch to v15 where MERGE was added.  Although I think the
case cannot be reached in v15, this seems like cheap insurance.

Per investigation of a report from Alexander Lakhin.

Discussion: https://postgr.es/m/36bee393-b351-16ac-93b2-d46d83637e45@gmail.com

Branch
------
REL_15_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/e6d8639cf25ccfffe12695768a4f7a60130c426f

Modified Files
--------------
src/backend/optimizer/plan/analyzejoins.c |  8 ++++++++
src/test/regress/expected/merge.out       | 32 +++++++++++++++++++++++++++++++
src/test/regress/sql/merge.sql            | 20 +++++++++++++++++++
3 files changed, 60 insertions(+)


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

Предыдущее
От: Jeff Davis
Дата:
Сообщение: pgsql: Limit memory usage of pg_walinspect functions.
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Fix parsing of ISO-8601 interval fields with exponential notatio