diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 53b0f3a9c1..e3233a8f38 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -10581,6 +10581,9 @@ GetForeignKeyActionTriggers(Relation trigrel, continue; if (trgform->tgrelid != confrelid) continue; + /* Only ever look at "action" triggers on the PK side. */ + if (RI_FKey_trigger_type(trgform->tgfoid) != RI_TRIGGER_PK) + continue; if (TRIGGER_FOR_DELETE(trgform->tgtype)) { Assert(*deleteTriggerOid == InvalidOid); @@ -10591,8 +10594,11 @@ GetForeignKeyActionTriggers(Relation trigrel, Assert(*updateTriggerOid == InvalidOid); *updateTriggerOid = trgform->oid; } +#ifndef USE_ASSERT_CHECKING + /* In an assert-enabled build, continue looking to find duplicates */ if (OidIsValid(*deleteTriggerOid) && OidIsValid(*updateTriggerOid)) break; +#endif } if (!OidIsValid(*deleteTriggerOid)) @@ -10636,6 +10642,9 @@ GetForeignKeyCheckTriggers(Relation trigrel, continue; if (trgform->tgrelid != conrelid) continue; + /* Only ever look at "check" triggers on the FK side. */ + if (RI_FKey_trigger_type(trgform->tgfoid) != RI_TRIGGER_FK) + continue; if (TRIGGER_FOR_INSERT(trgform->tgtype)) { Assert(*insertTriggerOid == InvalidOid); @@ -10646,8 +10655,11 @@ GetForeignKeyCheckTriggers(Relation trigrel, Assert(*updateTriggerOid == InvalidOid); *updateTriggerOid = trgform->oid; } +#ifndef USE_ASSERT_CHECKING + /* In an assert-enabled build, continue looking to find duplicates. */ if (OidIsValid(*insertTriggerOid) && OidIsValid(*updateTriggerOid)) break; +#endif } if (!OidIsValid(*insertTriggerOid))