From aadb22cbe11754cdac5c8bae511d492dd754449d Mon Sep 17 00:00:00 2001
From: "Paul A. Jungwirth" <pj@illuminatedcomputing.com>
Date: Thu, 3 Sep 2026 09:55:11 -0700
Subject: [PATCH v1] Document trigger behavior for temporal leftovers

The leftovers inserted by an UPDATE/DELETE FOR PORTION OF fire insert
triggers (as if they were separate statements). If a row-level BEFORE
INSERT trigger returns NULL, we skip inserting the leftover. This commit
adds a note documenting that behavior.

Reported-by: Zsolt Parragi <zsolt.parragi@percona.com>
Author: Paul A. Jungwirth <pj@illuminatedcomputing.com>
Discussion: https://postgr.es/m/CAN4CZFNSOA_LXWKC6sAOduWVsaxjzmFBNEHUQii89KUnMhBtcw%40mail.gmail.com
Backpatch-through: 19
---
 doc/src/sgml/ref/delete.sgml | 3 +++
 doc/src/sgml/ref/update.sgml | 4 +++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/doc/src/sgml/ref/delete.sgml b/doc/src/sgml/ref/delete.sgml
index 3ab1f60525a..2ac25a3af5e 100644
--- a/doc/src/sgml/ref/delete.sgml
+++ b/doc/src/sgml/ref/delete.sgml
@@ -86,6 +86,9 @@ DELETE FROM [ ONLY ] <replaceable class="parameter">table_name</replaceable> [ *
    application time was completely deleted, extended before/after the change,
    or both.  Multiranges never require two temporal leftovers, because one
    value can always contain whatever application time remains.
+   <literal>INSERT</literal> triggers fire for each inserted leftover. If a
+   row-level <literal>BEFORE INSERT</literal> trigger returns
+   <literal>NULL</literal>, no leftover is inserted.
   </para>
 
   <para>
diff --git a/doc/src/sgml/ref/update.sgml b/doc/src/sgml/ref/update.sgml
index 3175671d475..8227aa036ee 100644
--- a/doc/src/sgml/ref/update.sgml
+++ b/doc/src/sgml/ref/update.sgml
@@ -88,7 +88,9 @@ UPDATE [ ONLY ] <replaceable class="parameter">table_name</replaceable> [ * ]
    two inserted records, depending on whether the original application time
    was completely updated, extended before/after the change, or both.
    Multiranges never require two temporal leftovers, because one value can
-   always contain whatever application time remains.
+   always contain whatever application time remains. <literal>INSERT</literal>
+   triggers fire for each inserted leftover. If a row-level <literal>BEFORE
+   INSERT</literal> trigger returns <literal>NULL</literal>, no leftover is inserted.
   </para>
 
   <para>
-- 
2.47.3

