pgsql: Fix another oversight in checking if a join with LATERAL refs is
От | Tom Lane |
---|---|
Тема | pgsql: Fix another oversight in checking if a join with LATERAL refs is |
Дата | |
Msg-id | E1a64UG-0005UW-Eq@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix another oversight in checking if a join with LATERAL refs is legal. It was possible for the planner to decide to join a LATERAL subquery to the outer side of an outer join before the outer join itself is completed. Normally that's fine because of the associativity rules, but it doesn't work if the subquery contains a lateral reference to the inner side of the outer join. In such a situation the outer join *must* be done first. join_is_legal() missed this consideration and would allow the join to be attempted, but the actual path-building code correctly decided that no valid join path could be made, sometimes leading to planner errors such as "failed to build any N-way joins". Per report from Andreas Seltenreich. Back-patch to 9.3 where LATERAL support was added. Branch ------ master Details ------- http://git.postgresql.org/pg/commitdiff/7e19db0c09719d7919a8fdd96a1fffe7efd2df93 Modified Files -------------- src/backend/optimizer/path/joinrels.c | 30 ++++++++++++++++++++++++ src/backend/optimizer/util/relnode.c | 41 +++++++++++++++++++++++++++++++++ src/include/optimizer/pathnode.h | 1 + src/test/regress/expected/join.out | 41 +++++++++++++++++++++++++++++++++ src/test/regress/sql/join.sql | 19 +++++++++++++++ 5 files changed, 132 insertions(+)
В списке pgsql-committers по дате отправления: