Fix GetForeignKey*Triggers for self-referential FKs
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 9 Sep 2022 10:22:20 +0000 (12:22 +0200)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 9 Sep 2022 10:22:20 +0000 (12:22 +0200)
commit8c848cd4b8e9e0fee33eaad33cb44376b9e5b480
tree3c0d95f602efc95e423704f638ea1f12cf0f3b73
parent8b878bffa8d8ac7e13508025c3ca5e6101e3a5e8
Fix GetForeignKey*Triggers for self-referential FKs

Because of inadequate filtering, the check triggers were confusing the
search for action triggers in GetForeignKeyActionTriggers and vice-versa
in GetForeignKeyCheckTriggers; this confusion results in seemingly
random assertion failures, and can have real impact in non-asserting
builds depending on catalog order.  Change these functions so that they
correctly ignore triggers that are not relevant to each side.

To reduce the odds of further problems, do not break out of the
searching loop in assertion builds.  This break is likely to hide bugs;
without it, we would have detected this bug immediately.

This problem was introduced by f4566345cf40, so backpatch to 15 where
that commit first appeared.

Author: Amit Langote <amitlangote09@gmail.com>
Discussion: https://postgr.es/m/20220908172029.sejft2ppckbo6oh5@awork3.anarazel.de
Discussion: https://postgr.es/m/4104619.1662663056@sss.pgh.pa.us
src/backend/commands/tablecmds.c