pgsql: Fix eclass_useful_for_merging to give valid results for appendre
От | Tom Lane |
---|---|
Тема | pgsql: Fix eclass_useful_for_merging to give valid results for appendre |
Дата | |
Msg-id | E1ZNVJT-00031J-8H@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix eclass_useful_for_merging to give valid results for appendrel children. Formerly, this function would always return "true" for an appendrel child relation, because it would think that the appendrel parent was a potential join target for the child. In principle that should only lead to some inefficiency in planning, but fuzz testing by Andreas Seltenreich disclosed that it could lead to "could not find pathkey item to sort" planner errors in odd corner cases. Specifically, we would think that all columns of a child table's multicolumn index were interesting pathkeys, causing us to generate a MergeAppend path that sorts by all the columns. However, if any of those columns weren't actually used above the level of the appendrel, they would not get added to that rel's targetlist, which would result in being unable to resolve the MergeAppend's sort keys against its targetlist during createplan.c. Backpatch to 9.3. In older versions, columns of an appendrel get added to its targetlist even if they're not mentioned above the scan level, so that the failure doesn't occur. It might be worth back-patching this fix to older versions anyway, but I'll refrain for the moment. Branch ------ REL9_4_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/d31e79415bc0cbae8b20192ab8a979c9ebbe5dac Modified Files -------------- src/backend/optimizer/path/equivclass.c | 14 ++++++++++--- src/backend/optimizer/path/pathkeys.c | 2 +- src/include/optimizer/paths.h | 3 ++- src/test/regress/expected/inherit.out | 34 +++++++++++++++++++++++++++++++ src/test/regress/sql/inherit.sql | 21 +++++++++++++++++++ 5 files changed, 69 insertions(+), 5 deletions(-)
В списке pgsql-committers по дате отправления: