On Sun, Nov 5, 2017 at 12:57 AM, Amit Kapila <amit.kapil...@gmail.com> wrote: > Thanks for the confirmation. Find rebased patch attached.
This looks like it's on the right track to me. I hope Tom will look into it, but if he doesn't I may try to get it committed myself. - if (rel->reloptkind == RELOPT_BASEREL) - generate_gather_paths(root, rel); + if (rel->reloptkind == RELOPT_BASEREL && + root->simple_rel_array_size > 2 && + !root->append_rel_list) This test doesn't look correct to me. Actually, it doesn't look anywhere close to correct to me. So, one of us is very confused... not sure whether it's you or me. simple_gather_path = (Path *) create_gather_path(root, rel, cheapest_partial_path, rel->reltarget, NULL, NULL); + + /* Add projection step if needed */ + if (target && simple_gather_path->pathtarget != target) + simple_gather_path = apply_projection_to_path(root, rel, simple_gather_path, target); Instead of using apply_projection_to_path, why not pass the correct reltarget to create_gather_path? + /* Set or update cheapest_total_path and related fields */ + set_cheapest(current_rel); I wonder if it's really OK to call set_cheapest() a second time for the same relation... -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgsql-hackers mailing list (firstname.lastname@example.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers