From 7d2ae226da67838825120f759a912362cf91e065 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Thu, 13 Feb 2025 13:15:23 +0100 Subject: [PATCH] WIP: Fix RESTRICT behavior for temporal foreign keys --- src/backend/utils/adt/ri_triggers.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index 8473448849c..bbd1d5712f2 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -787,6 +787,12 @@ ri_restrict(TriggerData *trigdata, bool is_no_action) Oid pk_type = RIAttType(pk_rel, riinfo->pk_attnums[i]); Oid fk_type = RIAttType(fk_rel, riinfo->fk_attnums[i]); + if (riinfo->hasperiod && !is_no_action) + { + if (i == riinfo->nkeys - 1) + continue; + } + quoteOneName(attname, RIAttName(fk_rel, riinfo->fk_attnums[i])); sprintf(paramname, "$%d", i + 1); @@ -2734,6 +2740,12 @@ ri_ReportViolation(const RI_ConstraintInfo *riinfo, Datum datum; bool isnull; + if (riinfo->hasperiod && is_restrict) + { + if (idx == riinfo->nkeys - 1) + continue; + } + name = NameStr(att->attname); datum = slot_getattr(violatorslot, fnum, &isnull); -- 2.48.1