Re: Effects of cascading references in foreign keys
Bruce Momjian <pgman@candle.pha.pa.us>
From: Bruce Momjian <pgman@candle.pha.pa.us>
To: Bruno Wolff III <bruno@wolff.to>
Cc: Martin Lesser <ml-pgsql@bettercom.de>, pgsql-performance@postgresql.org
Date: 2005-10-29T16:05:33Z
Lists: pgsql-performance
Bruno Wolff III wrote: > On Sat, Oct 29, 2005 at 13:10:31 +0200, > Martin Lesser <ml-pgsql@bettercom.de> wrote: > > Which effects have UPDATEs on REFERENCEd TABLEs when only columns in the > > referenced table are updated which are not part of the FOREIGN KEY > > constraint? > > In 8.1 there is a check to see if the foreign key value has changed and if > not a trigger isn't queued. In the currently released versions any update > will fire triggers. > The check in comment for trigger.c didn't say if this optimization applied > to both referencing and referenced keys or just one of those. > If you need to know more you can look at the code at: > http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/ > for trigger.c. It applies to both. See src/backend/utils/adt/ri_triggers.c::RI_FKey_keyequal_upd_pk() and RI_FKey_keyequal_upd_fk(). The first is for primary keys (pk), the second for foreign keys (fk). These are called by src/backend/command/triggers.c::AfterTriggerSaveEvent(). The checks prevent the trigger from being registered at all if there is no change in the primary/foreign key relationship. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073