• Tom Lane's avatar
    Fix contrib/postgres_fdw to handle multiple join conditions properly. · 83204e10
    Tom Lane authored
    The previous coding supposed that it could consider just a single join
    condition in any one parameterized path for the foreign table.  But in
    reality, the parameterized-path machinery forces all join clauses that are
    "movable to" the foreign table to be evaluated at that node; including
    clauses that we might not consider safe to send across.  Such cases would
    result in an Assert failure in an assert-enabled build, and otherwise in
    sending an unsafe clause to the foreign server, which might result in
    errors or silently-wrong answers.  A lesser problem was that the
    cost/rowcount estimates generated for the parameterized path failed to
    account for any additional join quals that get assigned to the scan.
    
    To fix, rewrite postgresGetForeignPaths so that it correctly collects all
    the movable quals for any one outer relation when generating parameterized
    paths; we'll now generate just one path per outer relation not one per join
    qual.  Also fix bogus assumptions in postgresGetForeignPlan and
    estimate_path_cost_size that only safe-to-send join quals will be
    presented.
    
    Based on complaint from Etsuro Fujita that the path costs were being
    miscalculated, though this is significantly different from his proposed
    patch.
    83204e10
postgres_fdw.out 150 KB