pgsql: Fix droppability of constraints upon partition detach

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix droppability of constraints upon partition detach
Date: 2019-01-24 17:10:28
Message-ID: E1gmiWK-0006xF-Tu@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix droppability of constraints upon partition detach

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

Branch
------
REL_11_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/1ad5210998e33cccb4ea97b33837f19193d1011d

Modified Files
--------------
src/backend/catalog/pg_constraint.c | 12 ++++++++++--
src/backend/commands/tablecmds.c | 24 ++++++++++++++++++++++--
src/test/regress/expected/foreign_key.out | 20 ++++++++++++++++++--
src/test/regress/sql/foreign_key.sql | 16 +++++++++++++++-
4 files changed, 65 insertions(+), 7 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Peter Eisentraut 2019-01-24 20:59:45 pgsql: Fix whitespace
Previous Message Tom Lane 2019-01-24 16:32:05 pgsql: Fix portability problem in pgbench.