pgsql: Check that partitions are not in use when dropping constraints
От | Alvaro Herrera |
---|---|
Тема | pgsql: Check that partitions are not in use when dropping constraints |
Дата | |
Msg-id | E1hq2HX-0000xg-9N@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Check that partitions are not in use when dropping constraints If the user creates a deferred constraint in a partition, and in a transaction they cause the constraint's trigger execution to be deferred until commit time *and* drop the constraint, then when commit time comes the queued trigger will fail to run because the trigger object will have been dropped. This is explained because when a constraint gets dropped in a partitioned table, the recursion to drop the ones in partitions is done by the dependency mechanism, not by ALTER TABLE traversing the recursion tree as in all other cases. In the non-partitioned case, this problem is avoided by checking that the table is not "in use" by alter-table; other alter-table subcommands that recurse to partitions do that check for each partition. But the dependency mechanism doesn't have a way to do that. Fix the problem by applying the same check to all partitions during ALTER TABLE's "prep" phase, which correctly raises the necessary error. Reported-by: Rajkumar Raghuwanshi <rajkumar.raghuwanshi@enterprisedb.com> Discussion: https://postgr.es/m/CAKcux6nZiO9-eEpr1ZD84bT1mBoVmeZkfont8iSpcmYrjhGWgA@mail.gmail.com Branch ------ REL_11_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/ec7f9a7407d3f6e0d27033b026bcb966eebe8e71 Modified Files -------------- src/backend/commands/tablecmds.c | 56 +++++++++++++++++++++++++------ src/test/regress/expected/foreign_key.out | 15 +++++++-- src/test/regress/sql/foreign_key.sql | 13 ++++++- 3 files changed, 70 insertions(+), 14 deletions(-)
В списке pgsql-committers по дате отправления: