• Michael Paquier's avatar
    Clarify use of temporary tables within partition trees · 1c7c317c
    Michael Paquier authored
    Since their introduction, partition trees have been a bit lossy
    regarding temporary relations.  Inheritance trees respect the following
    patterns:
    1) a child relation can be temporary if the parent is permanent.
    2) a child relation can be temporary if the parent is temporary.
    3) a child relation cannot be permanent if the parent is temporary.
    4) The use of temporary relations also imply that when both parent and
    child need to be from the same sessions.
    
    Partitions share many similar patterns with inheritance, however the
    handling of the partition bounds make the situation a bit tricky for
    case 1) as the partition code bases a lot of its lookup code upon
    PartitionDesc which does not really look after relpersistence.  This
    causes for example a temporary partition created by session A to be
    visible by another session B, preventing this session B to create an
    extra partition which overlaps with the temporary one created by A with
    a non-intuitive error message.  There could be use-cases where mixing
    permanent partitioned tables with temporary partitions make sense, but
    that would be a new feature.  Partitions respect 2), 3) and 4) already.
    
    It is a bit depressing to see those error checks happening in
    MergeAttributes() whose purpose is different, but that's left as future
    refactoring work.
    
    Back-patch down to 10, which is where partitioning has been introduced,
    except that default partitions do not apply there.  Documentation also
    includes limitations related to the use of temporary tables with
    partition trees.
    
    Reported-by: David Rowley
    Author: Amit Langote, Michael Paquier
    Reviewed-by: Ashutosh Bapat, Amit Langote, Michael Paquier
    Discussion: https://postgr.es/m/CAKJS1f94Ojk0og9GMkRHGt8wHTW=ijq5KzJKuoBoqWLwSVwGmw@mail.gmail.com
    1c7c317c
create_table.sql 21.9 KB