• Robert Haas's avatar
    Basic partition-wise join functionality. · f49842d1
    Robert Haas authored
    Instead of joining two partitioned tables in their entirety we can, if
    it is an equi-join on the partition keys, join the matching partitions
    individually.  This involves teaching the planner about "other join"
    rels, which are related to regular join rels in the same way that
    other member rels are related to baserels.  This can use significantly
    more CPU time and memory than regular join planning, because there may
    now be a set of "other" rels not only for every base relation but also
    for every join relation.  In most practical cases, this probably
    shouldn't be a problem, because (1) it's probably unusual to join many
    tables each with many partitions using the partition keys for all
    joins and (2) if you do that scenario then you probably have a big
    enough machine to handle the increased memory cost of planning and (3)
    the resulting plan is highly likely to be better, so what you spend in
    planning you'll make up on the execution side.  All the same, for now,
    turn this feature off by default.
    
    Currently, we can only perform joins between two tables whose
    partitioning schemes are absolutely identical.  It would be nice to
    cope with other scenarios, such as extra partitions on one side or the
    other with no match on the other side, but that will have to wait for
    a future patch.
    
    Ashutosh Bapat, reviewed and tested by Rajkumar Raghuwanshi, Amit
    Langote, Rafia Sabih, Thomas Munro, Dilip Kumar, Antonin Houska, Amit
    Khandekar, and by me.  A few final adjustments by me.
    
    Discussion: http://postgr.es/m/CAFjFpRfQ8GrQvzp3jA2wnLqrHmaXna-urjm_UY9BqXj=EaDTSA@mail.gmail.com
    Discussion: http://postgr.es/m/CAFjFpRcitjfrULr5jfuKWRPsGUX0LQ0k8-yG0Qw2+1LBGNpMdw@mail.gmail.com
    f49842d1
allpaths.c 109 KB