提交 d7c310c1 编写于 作者: T Tom Lane

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.
上级 548237fc
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
* *
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group * 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) ...@@ -193,17 +193,11 @@ RI_FKey_check(PG_FUNCTION_ARGS)
*/ */
ri_CheckTrigger(fcinfo, "RI_FKey_check", RI_TRIGTYPE_INUP); ri_CheckTrigger(fcinfo, "RI_FKey_check", RI_TRIGTYPE_INUP);
tgnargs = trigdata->tg_trigger->tgnargs;
tgargs = trigdata->tg_trigger->tgargs;
/* /*
* Get the relation descriptors of the FK and PK tables and the new tuple. * Get arguments.
*
* 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); tgnargs = trigdata->tg_trigger->tgnargs;
fk_rel = trigdata->tg_relation; tgargs = trigdata->tg_trigger->tgargs;
if (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event)) if (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event))
{ {
old_row = trigdata->tg_trigtuple; old_row = trigdata->tg_trigtuple;
...@@ -224,10 +218,16 @@ RI_FKey_check(PG_FUNCTION_ARGS) ...@@ -224,10 +218,16 @@ RI_FKey_check(PG_FUNCTION_ARGS)
*/ */
Assert(new_row_buf != InvalidBuffer); Assert(new_row_buf != InvalidBuffer);
if (!HeapTupleSatisfiesItself(new_row->t_data, new_row_buf)) if (!HeapTupleSatisfiesItself(new_row->t_data, new_row_buf))
{
heap_close(pk_rel, RowShareLock);
return PointerGetDatum(NULL); 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 <referential constraint definition> * SQL3 11.9 <referential constraint definition>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册