Re: [BUG] Fix DETACH with FK pointing to a partitioned table fails
Jehan-Guillaume de Rorthais <jgdr@dalibo.com>
From: Jehan-Guillaume de Rorthais <jgdr@dalibo.com>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: Tender Wang <tndrwang@gmail.com>, Junwang Zhao <zhjwpku@gmail.com>,
"pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>, Alexander
Lakhin <exclusion@gmail.com>, Baehler Thomas SBB CFF FFS
<thomas.baehler2@sbb.ch>, Guillaume Lelarge <guillaume@lelarge.info>,
Michael Paquier <michael@paquier.xyz>
Date: 2024-09-25T12:42:40Z
Lists: pgsql-hackers
Attachments
- v3-0001-Add-tests-about-FK-between-partitionned-tables.patch (text/x-patch)
On Thu, 5 Sep 2024 00:57:28 +0200 Jehan-Guillaume de Rorthais <jgdr@dalibo.com> wrote: > On Mon, 2 Sep 2024 23:01:47 +0200 > Jehan-Guillaume de Rorthais <jgdr@dalibo.com> wrote: > > […] > > > My proposal was to clean everything related to the old FK and use some > > existing code path to create a fresh and cleaner one. This requires some > > refactoring in existing code, but we would win a common path of code > > between create/attach/detach, a cleaner catalog and easier code maintenance. > > > > I've finally been able to write a PoC that implement this by calling > > addFkRecurseReferenced() from DetachPartitionFinalize(). I can't join > > it here because it is currently an ugly draft and I still have some work > > to do. But I would really like to have a little more time (one or two > > days) to explore this avenue further before you commit yours, if you don't > > mind? Or maybe you already have considered this avenue and rejected it? > > Please, find in attachment a patch implementing this idea. Please, find in attachment a set of patch based on the previous one. v3-0001-Add-tests-about-FK-between-partitionned-tables.patch: This patch implement tests triggering the bugs discussed. Based on Michael advice, I added one level sub-partitioning to stress test the recursive code and some queries checking on the catalog objects. v3-0002-Rework-foreign-key-mangling-during-ATTACH-DETACH.patch: The main patch, similar to v2 in my previous patch with more comments added/restored. I added some more explanations in the commit message about the refactoring itself, making addFkRecurseReferencing() and addFkRecurseReferenced() having the same logic. v3-0003-Use-addFkConstraint-in-addFkRecurseReferencing.patch A new patch refactoring the constraint creation in addFkRecurseReferencing() to use the new addFkConstraint() function. v3-0004-Use-addFkConstraint-in-CloneFkReferencing.patch A new patch refactoring the constraint creation in CloneFkReferencing() to use the new addFkConstraint() function. TODO: * I hadn't time to study last Tender Wang comment here: https://postgr.es/m/CAHewXNkuU2V7GfgFkwd265RJ99%2BBfJueNEZhrHSk39o3thqxNA%40mail.gmail.com * I still think we should split v3-0002 in two different patch… * backporting… Regards,
Commits
-
Fix some more bugs in foreign keys connecting partitioned tables
- f7d510a38245 16.5 landed
- 936ab6de9595 17.1 landed
- 2d5fe514052a 18.0 landed
- 1b216fceffe3 15.9 landed
-
Restructure foreign key handling code for ATTACH/DETACH
- d20194cead75 13.17 landed
- 5d83bad6b87d 15.9 landed
- 5914a22f6ea5 17.1 landed
- 53af9491a043 18.0 landed
- 46a8c27a7226 14.14 landed
- 2aaf2a28b87e 16.5 landed
-
Create foreign key triggers in partitioned tables too
- f4566345cf40 15.0 cited