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-002nDy-Qk@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_12_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/9529b1eb1b833686b09aff8f325626872be34297 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 по дате отправления: