pgsql: Fix generate_partitionwise_join_paths() to tolerate failure.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix generate_partitionwise_join_paths() to tolerate failure.
Дата
Msg-id E1p1u2U-001zzO-EG@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix generate_partitionwise_join_paths() to tolerate failure.

We might fail to generate a partitionwise join, because
reparameterize_path_by_child() does not support all path types.
This should not be a hard failure condition: we should just fall back
to a non-partitioned join.  However, generate_partitionwise_join_paths
did not consider this possibility and would emit the (misleading)
error "could not devise a query plan for the given query" if we'd
failed to make any paths for a child join.  Fix it to give up on
partitionwise joining if so.  (The accepted technique for giving up
appears to be to set rel->nparts = 0, which I find pretty bizarre,
but there you have it.)

I have not added a test case because there'd be little point:
any omissions of this sort that we identify would soon get fixed
by extending reparameterize_path_by_child(), so the test would stop
proving anything.  However, right now there is a known test case based
on failure to cover MaterialPath, and with that I've found that this
is broken in all supported versions.  Hence, patch all the way back.

Original report and patch by me; thanks to Richard Guo for
identifying a test case that works against committed versions.

Discussion: https://postgr.es/m/1854233.1669949723@sss.pgh.pa.us

Branch
------
REL_12_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/1ff549e844cc649b5f4f1bbab88404aaffebbfa4

Modified Files
--------------
src/backend/optimizer/path/allpaths.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)


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

Предыдущее
От: David Rowley
Дата:
Сообщение: pgsql: Improve performance of pg_strtointNN functions
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Re-pgindent a few files.