From 34479d9a36a280afe1387146871d4c1528cf2cbf Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 19 Jul 2018 08:20:59 +0200 Subject: [PATCH] Remove dead foreign key optimization code The ri_KeysEqual() calls in the foreign-key trigger functions to optimize away some updates are useless because since adfeef55cbcc5dc72a772777f88c1be05a70dfee those triggers are not enqueued at all. (It's also not useful to keep these checks as some kind of backstop, since it's also semantically correct to just run the full check even with equal keys.) Reviewed-by: Daniel Gustafsson --- src/backend/utils/adt/ri_triggers.c | 51 ----------------------------- 1 file changed, 51 deletions(-) diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index 049b20449a..dfa9ab98c3 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -744,20 +744,6 @@ ri_restrict(TriggerData *trigdata, bool is_no_action) break; } - /* - * In UPDATE, no need to do anything if old and new keys are equal - */ - if (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event)) - { - HeapTuple new_row = trigdata->tg_newtuple; - - if (ri_KeysEqual(pk_rel, old_row, new_row, riinfo, true)) - { - heap_close(fk_rel, RowShareLock); - return PointerGetDatum(NULL); - } - } - /* * If another PK row now exists providing the old key values, we * should not do anything. However, this check should only be @@ -1098,15 +1084,6 @@ RI_FKey_cascade_upd(PG_FUNCTION_ARGS) break; } - /* - * No need to do anything if old and new keys are equal - */ - if (ri_KeysEqual(pk_rel, old_row, new_row, riinfo, true)) - { - heap_close(fk_rel, RowExclusiveLock); - return PointerGetDatum(NULL); - } - if (SPI_connect() != SPI_OK_CONNECT) elog(ERROR, "SPI_connect failed"); @@ -1316,20 +1293,6 @@ ri_setnull(TriggerData *trigdata) break; } - /* - * In UPDATE, no need to do anything if old and new keys are equal - */ - if (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event)) - { - HeapTuple new_row = trigdata->tg_newtuple; - - if (ri_KeysEqual(pk_rel, old_row, new_row, riinfo, true)) - { - heap_close(fk_rel, RowExclusiveLock); - return PointerGetDatum(NULL); - } - } - if (SPI_connect() != SPI_OK_CONNECT) elog(ERROR, "SPI_connect failed"); @@ -1536,20 +1499,6 @@ ri_setdefault(TriggerData *trigdata) break; } - /* - * In UPDATE, no need to do anything if old and new keys are equal - */ - if (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event)) - { - HeapTuple new_row = trigdata->tg_newtuple; - - if (ri_KeysEqual(pk_rel, old_row, new_row, riinfo, true)) - { - heap_close(fk_rel, RowExclusiveLock); - return PointerGetDatum(NULL); - } - } - if (SPI_connect() != SPI_OK_CONNECT) elog(ERROR, "SPI_connect failed");