From 36d8a987f9138c6b610cb2532d6cf523b139fd0a Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 5 Nov 2008 20:17:18 +0000 Subject: [PATCH] This maneuver really requires a comment ... --- src/backend/utils/adt/trigfuncs.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/backend/utils/adt/trigfuncs.c b/src/backend/utils/adt/trigfuncs.c index a8304f1931..54d49dc476 100644 --- a/src/backend/utils/adt/trigfuncs.c +++ b/src/backend/utils/adt/trigfuncs.c @@ -62,11 +62,17 @@ suppress_redundant_updates_trigger(PG_FUNCTION_ARGS) newheader = newtuple->t_data; oldheader = oldtuple->t_data; + /* + * We are called before the OID, if any, has been transcribed from the + * old tuple to the new (in heap_update). To avoid a bogus compare + * failure, copy the OID now. But check that someone didn't already put + * another OID value into newtuple. (That's not actually possible at + * present, but maybe someday.) + */ if (trigdata->tg_relation->rd_rel->relhasoids && !OidIsValid(HeapTupleHeaderGetOid(newheader))) HeapTupleHeaderSetOid(newheader, HeapTupleHeaderGetOid(oldheader)); - /* if the tuple payload is the same ... */ if (newtuple->t_len == oldtuple->t_len && newheader->t_hoff == oldheader->t_hoff && @@ -81,7 +87,6 @@ suppress_redundant_updates_trigger(PG_FUNCTION_ARGS) /* ... then suppress the update */ rettuple = NULL; } - - - return PointerGetDatum(rettuple); + + return PointerGetDatum(rettuple); } -- 2.39.5