Here's a patch to allow partitioned tables to be referenced by foreign keys. Current state is WIP, but everything should work; see below for the expected exception.
The design is very simple: have one pg_constraint row for each partition on each side, each row pointing to the topmost table on the other side; triggers appear on each leaf partition (and naturally they don't appear on any intermediate partitioned table).
This is an important and much needed feature!
Based on my extremely naive reading of this code, I have two perhaps equally naive questions:
1. it seems that we will continue to to per-row RI checks for inserts and updates. However, there already exists a bulk check in RI_Initial_Check(). Could we modify this bulk check to do RI checks on a per-statement basis rather than a per-row basis?
2. If #1 is possible, is the overhead of transitions tables too great for the single-row case?