• Robert Haas's avatar
    Prevent BEFORE triggers from violating partitioning constraints. · 15ce775f
    Robert Haas authored
    Since tuple-routing implicitly checks the partitioning constraints
    at least for the levels of the partitioning hierarchy it traverses,
    there's normally no need to revalidate the partitioning constraint
    after performing tuple routing.  However, if there's a BEFORE trigger
    on the target partition, it could modify the tuple, causing the
    partitioning constraint to be violated.  Catch that case.
    
    Also, instead of checking the root table's partition constraint after
    tuple-routing, check it beforehand.  Otherwise, the rules for when
    the partitioning constraint gets checked get too complicated, because
    you sometimes have to check part of the constraint but not all of it.
    This effectively reverts commit 39162b20
    in favor of a different approach altogether.
    
    Report by me.  Initial debugging by Jeevan Ladhe.  Patch by Amit
    Langote, reviewed by me.
    
    Discussion: http://postgr.es/m/CA+Tgmoa9DTgeVOqopieV8d1QRpddmP65aCdxyjdYDoEO5pS5KA@mail.gmail.com
    15ce775f
nodeModifyTable.c 68.8 KB