Avoid primary key lookup (and lock) if foreign key does not change
authorJan Wieck <JanWieck@Yahoo.com>
Mon, 7 Apr 2003 20:30:38 +0000 (20:30 +0000)
committerJan Wieck <JanWieck@Yahoo.com>
Mon, 7 Apr 2003 20:30:38 +0000 (20:30 +0000)
commitcd203f33958b99656e8486351be08197a9a73d76
tree1b9ea0bc4c2b5b6910f051a9b41964e2d69c4f14
parentafe1185cf082c4c1bb5cafcffa544e0f5d4fc97f
Avoid primary key lookup (and lock) if foreign key does not change
on UPDATE.

This get's rid of the long standing annoyance that updating a row
that has foreign keys locks all the referenced rows even if the
foreign key values do not change.

The trick is to actually do a check identical to NO ACTION after an
eventually done UPDATE in the SET DEFAULT case. Since a SET DEFAULT
operation should have moved referencing rows to a new "home", a following
NO ACTION check can only fail if the column defaults of the referencing
table resulted in the key we actually deleted. Thanks to Stephan.

Jan
src/backend/utils/adt/ri_triggers.c
src/test/regress/expected/foreign_key.out