>>> > In an attempt to test the geqo side of this patch, I reduced > geqo_threshold to 6 and set enable_partitionwise_join to to true and > tried following query, which crashed, > > explain select * from prt, prt2, prt3, prt32, prt4, prt42 where prt.a > = prt2.b and prt3.a = prt32.b and prt4.a = prt42.b and prt2.a > 1000 > order by prt.a desc; > > Stack-trace for the crash is as follows, > Nice catch. When reparameterize_path_by_child() may be running in a temporary memory context while running in GEQO mode. It may add a new PPI to base relation all in the temporary context. In the next GEQO cycle, the ppilist will be clobbered since the temporary context is reset for each geqo cycle. The fix is to allocate PPI in the same memory context as the RelOptInfo similar to mark_dummy_rel().
I also found another problem. In geqo, we never call generate_partition_wise_join_paths() which set cheapest paths for each child-join. Because of this cheapest_*_paths are never set for those rels, thus segfaulting in functions like sort_inner_and_outer() which use those. Here's patch fixing both the issues. Please let me know if it fixes the issues you are seeing. -- Best Wishes, Ashutosh Bapat EnterpriseDB Corporation The Postgres Database Company
geqo_fix.patch
Description: Binary data
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers