Doc: clarify how triggers relate to transactions.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 1 Sep 2021 21:24:59 +0000 (17:24 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 1 Sep 2021 21:24:59 +0000 (17:24 -0400)
Laurenz Albe, per gripe from Nathan Long.

Discussion: https://postgr.es/m/161953360822.695.15805897835151971142@wrigleys.postgresql.org

doc/src/sgml/ref/create_trigger.sgml
doc/src/sgml/trigger.sgml

index 3f4b5acc7b7ed9ce41b1e9aea928c09acbb77827..e4afa1c01d3095e5abfe6bf53810888982a88154 100644 (file)
@@ -175,6 +175,10 @@ CREATE [ OR REPLACE ] [ CONSTRAINT ] TRIGGER <replaceable class="parameter">name
   </para>
 
   <para>
+   <indexterm>
+    <primary>trigger</primary>
+    <secondary>constraint trigger</secondary>
+   </indexterm>
    When the <literal>CONSTRAINT</literal> option is specified, this command creates a
    <firstterm>constraint trigger</firstterm>.  This is the same as a regular trigger
    except that the timing of the trigger firing can be adjusted using
index f1a845f756864d4e2d0e085786c13e71da60a24f..7e2654493bb765faceb5d9211418ad2918d0cab1 100644 (file)
     row in the view is identified as needing to be operated on.
    </para>
 
+   <para>
+    The execution of an <literal>AFTER</literal> trigger can be deferred
+    to the end of the transaction, rather than the end of the statement,
+    if it was defined as a <firstterm>constraint trigger</firstterm>.
+    In all cases, a trigger is executed as part of the same transaction as
+    the statement that triggered it, so if either the statement or the
+    trigger causes an error, the effects of both will be rolled back.
+   </para>
+
    <para>
     A statement that targets a parent table in an inheritance or partitioning
     hierarchy does not cause the statement-level triggers of affected child