ri_triggers.c is endlessly long and repetitive. I want to clean it up a bit (more).
Having just been down this road, I agree that a lot of cleanup is needed and possible.
I looked into all these switch cases for the unimplemented MATCH PARTIAL option. I toyed around with how a MATCH PARTIAL implementation would actually look like, and it likely wouldn't use the existing code structure anyway, so let's just simplify this for now.
+1
Attached are some patches.
I intend to look this over in much greater detail, but I did skim the code and it seems like you left the SET DEFAULT and SET NULL paths separate. In my attempt at statement level triggers I realized that they only differed by the one literal value, and parameterized the function.