From d7c310c1fa03d062225cf7c5ef146cc615d44b7b Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 21 Aug 2006 19:15:29 +0000 Subject: [PATCH] Minor code rearrangement to save a few cycles in RI_FKey_check when the subject tuple is already deleted: we need not open the pk_rel until after we check that. --- src/backend/utils/adt/ri_triggers.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index 8eac5b8578..21ae21d95c 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -17,7 +17,7 @@ * * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/backend/utils/adt/ri_triggers.c,v 1.86 2006/07/14 14:52:24 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/ri_triggers.c,v 1.87 2006/08/21 19:15:29 tgl Exp $ * * ---------- */ @@ -193,17 +193,11 @@ RI_FKey_check(PG_FUNCTION_ARGS) */ ri_CheckTrigger(fcinfo, "RI_FKey_check", RI_TRIGTYPE_INUP); + /* + * Get arguments. + */ tgnargs = trigdata->tg_trigger->tgnargs; tgargs = trigdata->tg_trigger->tgargs; - - /* - * Get the relation descriptors of the FK and PK tables and the new tuple. - * - * pk_rel is opened in RowShareLock mode since that's what our eventual - * SELECT FOR SHARE will get on it. - */ - pk_rel = heap_open(trigdata->tg_trigger->tgconstrrelid, RowShareLock); - fk_rel = trigdata->tg_relation; if (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event)) { old_row = trigdata->tg_trigtuple; @@ -224,10 +218,16 @@ RI_FKey_check(PG_FUNCTION_ARGS) */ Assert(new_row_buf != InvalidBuffer); if (!HeapTupleSatisfiesItself(new_row->t_data, new_row_buf)) - { - heap_close(pk_rel, RowShareLock); return PointerGetDatum(NULL); - } + + /* + * Get the relation descriptors of the FK and PK tables. + * + * pk_rel is opened in RowShareLock mode since that's what our eventual + * SELECT FOR SHARE will get on it. + */ + fk_rel = trigdata->tg_relation; + pk_rel = heap_open(trigdata->tg_trigger->tgconstrrelid, RowShareLock); /* ---------- * SQL3 11.9