aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt
diff options
context:
space:
mode:
authorJan Wieck <JanWieck@Yahoo.com>2003-10-31 03:58:21 +0000
committerJan Wieck <JanWieck@Yahoo.com>2003-10-31 03:58:21 +0000
commitcc4baf4da380ae010975cc8be4db09e27833da21 (patch)
tree1364c5ff179359d5b5505b984d7f9a56170355d4 /src/backend/utils/adt
parente181001764185e2d6e8a5d755c021e2c63c600dd (diff)
downloadpostgresql-cc4baf4da380ae010975cc8be4db09e27833da21.tar.gz
postgresql-cc4baf4da380ae010975cc8be4db09e27833da21.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')
-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 306dda0aa4e..d0e3e9c0817 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-2003, PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/ri_triggers.c,v 1.62 2003/10/06 16:38:28 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/ri_triggers.c,v 1.63 2003/10/31 03:58:20 wieck Exp $
*
* ----------
*/
@@ -379,7 +379,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);