aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/ri_triggers.c
diff options
context:
space:
mode:
authorJan Wieck <JanWieck@Yahoo.com>2003-10-31 03:57:42 +0000
committerJan Wieck <JanWieck@Yahoo.com>2003-10-31 03:57:42 +0000
commitd1c496e9d58f984731f9385e001d8259cdecfd8c (patch)
tree06867770e3a6faada4da7130bafb0fa20ccf5dc6 /src/backend/utils/adt/ri_triggers.c
parent9e692f230737cacfda83efc7a7bda522501c2bf9 (diff)
downloadpostgresql-d1c496e9d58f984731f9385e001d8259cdecfd8c.tar.gz
postgresql-d1c496e9d58f984731f9385e001d8259cdecfd8c.zip
Fix for possible referential integrity violation when a qualified ON INSERT
rule split the query into one INSERT and one UPDATE where the UPDATE then hit's the just created row without modifying the key fields again. In this special case, the new key slipped in totally unchecked. Jan
Diffstat (limited to 'src/backend/utils/adt/ri_triggers.c')
-rw-r--r--src/backend/utils/adt/ri_triggers.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c
index 539dee726b2..0b47b614ea7 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-2002, PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/ri_triggers.c,v 1.43.2.3 2003/05/21 18:14:46 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/ri_triggers.c,v 1.43.2.4 2003/10/31 03:57:41 wieck Exp $
*
* ----------
*/
@@ -400,7 +400,9 @@ RI_FKey_check(PG_FUNCTION_ARGS)
*/
if (TRIGGER_FIRED_BY_UPDATE(trigdata->tg_event))
{
- if (ri_KeysEqual(fk_rel, old_row, new_row, &qkey,
+ if (HeapTupleHeaderGetXmin(old_row->t_data) !=
+ GetCurrentTransactionId() &&
+ ri_KeysEqual(fk_rel, old_row, new_row, &qkey,
RI_KEYPAIR_FK_IDX))
{
heap_close(pk_rel, RowShareLock);