• Alvaro Herrera's avatar
    Fix state reversal after partition tuple routing · 6666ee49
    Alvaro Herrera authored
    We make some changes to ModifyTableState and the EState it uses whenever
    we route tuples to partitions; but we weren't restoring properly in all
    cases, possibly causing crashes when partitions with different tuple
    descriptors are targeted by tuples inserted in the same command.
    Refactor some code, creating ExecPrepareTupleRouting, to encapsulate the
    needed state changing logic, and have it invoked one level above its
    current place (ie. put it in ExecModifyTable instead of ExecInsert);
    this makes it all more readable.
    
    Add a test case to exercise this.
    
    We don't support having views as partitions; and since only views can
    have INSTEAD OF triggers, there is no point in testing for INSTEAD OF
    when processing insertions into a partitioned table.  Remove code that
    appears to support this (but which is actually never relevant.)
    
    In passing, fix location of some very confusing comments in
    ModifyTableState.
    
    Reported-by: Amit Langote
    Author: Etsuro Fujita, Amit Langote
    Discussion: https://postgr/es/m/0473bf5c-57b1-f1f7-3d58-455c2230bc5f@lab.ntt.co.jp
    6666ee49
nodeModifyTable.c 81.8 KB