• Alvaro Herrera's avatar
    Fix droppability of constraints upon partition detach · efd9366d
    Alvaro Herrera authored
    We were failing to set conislocal correctly for constraints in
    partitions after partition detach, leading to those constraints becoming
    undroppable.  Fix by setting the flag correctly.  Existing databases
    might contain constraints with the conislocal wrongly set to false, for
    partitions that were detached; this situation should be fixable by
    applying an UPDATE on pg_constraint to set conislocal true.  This
    problem should otherwise be innocuous and should disappear across a
    dump/restore or pg_upgrade.
    
    Secondarily, when constraint drop was attempted in a partitioned table,
    ATExecDropConstraint would try to recurse to partitions after doing
    performDeletion() of the constraint in the partitioned table itself; but
    since the constraint in the partitions are dropped by the initial call
    of performDeletion() (because of following dependencies), the recursion
    step would fail since it would not find the constraint, causing the
    whole operation to fail.  Fix by preventing recursion.
    
    Reported-by: Amit Langote
    Diagnosed-by: Amit Langote
    Author: Amit Langote, Álvaro Herrera
    Discussion: https://postgr.es/m/f2b8ead5-4131-d5a8-8016-2ea0a31250af@lab.ntt.co.jp
    efd9366d
pg_constraint.c 37.2 KB