pgsql: Fix hash join when inner hashkey expressions contain Params.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix hash join when inner hashkey expressions contain Params.
Дата
Msg-id E1qBjCq-002nDu-Pj@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix hash join when inner hashkey expressions contain Params.

If the inner-side expressions contain PARAM_EXEC Params, we must
re-hash whenever the values of those Params change.  The executor
mechanism for that exists already, but we failed to invoke it because
finalize_plan() neglected to search the Hash.hashkeys field for
Params.  This allowed a previous scan's hash table to be re-used
when it should not be, leading to rows missing from the join's output.
(I believe incorrectly-included join rows are impossible however,
since checking the real hashclauses would reject false matches.)

This bug is very ancient, dating probably to d24d75ff1 of 7.4.
Sadly, this simple fix depends on the plan representational changes
made by 2abd7ae9b, so it will only work back to v12.  I thought
about trying to make some kind of hack for v11, but I'm leery
of putting code significantly different from what is used in the
newer branches into a nearly-EOL branch.  Seeing that the bug
escaped detection for a full twenty years, problematic cases
must be rare; so I don't feel too awful about leaving v11 as-is.

Per bug #17985 from Zuming Jiang.  Back-patch to v12.

Discussion: https://postgr.es/m/17985-748b66607acd432e@postgresql.org

Branch
------
REL_14_STABLE

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

Modified Files
--------------
src/backend/optimizer/plan/subselect.c  |  6 +++++-
src/test/regress/expected/join_hash.out | 36 +++++++++++++++++++++++++++++++++
src/test/regress/sql/join_hash.sql      | 19 +++++++++++++++++
3 files changed, 60 insertions(+), 1 deletion(-)


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

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: pgsql: docs: adjust tag indenting and add MERGE mention
Следующее
От: Nathan Bossart
Дата:
Сообщение: pgsql: Move bool parameter for vacuum_rel() to option bits.