pgsql: Fix droppability of constraints upon partition detach - Mailing list pgsql-committers

From Alvaro Herrera
Subject pgsql: Fix droppability of constraints upon partition detach
Date
Msg-id E1gmiWK-0006xE-Tm@gemulon.postgresql.org
Whole thread Raw
List 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
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/efd9366dcedec8db9fc85e77d071b0c5a6badea2

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


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Fix portability problem in pgbench.
Next
From: Peter Eisentraut
Date:
Subject: pgsql: Fix whitespace