Re: partitioned tables referenced by FKs
Alvaro Herrera <alvherre@2ndquadrant.com>
From: Alvaro Herrera <alvherre@2ndquadrant.com>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>, Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2019-03-14T19:36:35Z
Lists: pgsql-hackers
On 2019-Mar-14, Robert Haas wrote: > On Thu, Mar 14, 2019 at 1:40 PM Alvaro Herrera <alvherre@2ndquadrant.com> wrote: > > When you say "fk (a) references pk1" you're saying that all the values > > in fk(a) must appear in pk1. OTOH when you say "fk references pk" you > > mean that the values might appear anywhere in pk, not just pk1. Have a > > look at the triggers in pg_trigger that appear when you do "references > > pk1" vs. when you do "references pk". The constraint itself might > > appear identical, but the former adds check triggers that are not > > present for the latter. > > It's probably not uncommon to have FKs between compatibly-partitioned > tables, though, and in that case they are really equivalent. For > example, if you have an orders table and an order_lines table and the > latter has an FK pointing at the former, and both are partitioned on > the order number, then it must be that every order_line references an > order in the matching partition. Even if it's not practical to use > the FK itself, it's a good excuse for skipping any validation scan you > otherwise might have performed. Well, I suppose that can be implemented as an optimization on top of what we have, but I think that we should first get this feature right, and later we can see about improving it. In any case, since the RI queries are run via SPI, any unnecessary partitions should get pruned by partition pruning based on each partition's constraint. So I'm not so certain that this is a problem worth spending much time/effort/risk of bugs on. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Commits
-
Support foreign keys that reference partitioned tables
- f56f8f8da6af 12.0 landed
-
Fix partitioned index creation bug with dropped columns
- 7009f1a2df65 11.3 landed
- 126d63122232 12.0 landed
-
Improve psql's \d display of foreign key constraints
- 1af25ca0c2d9 12.0 cited
-
Fix dependency recording bug for partitioned PKs
- 7e7c57bbb2eb 12.0 landed
-
Add index_get_partition convenience function
- a6da0047158b 12.0 landed
-
Restore RI trigger sanity check
- 815b20ae0c6e 12.0 landed
- 04f9b449aa30 11.3 landed
-
Foreign keys on partitioned tables
- 3de241dba86f 11.0 cited