postgres.git / summary / log / commit / refs

commit    1ad7191f7e927ecda72928a9f1e69d40edfed3e4
Author:   Amit Langote <amitlan@postgresql.org>
Date:     Mon Mar 30 01:10:17 2026 +0000

    Add comment explaining fire_triggers=false in ri_PerformCheck()
    
    The reason for passing fire_triggers=false to SPI_execute_snapshot()
    in ri_PerformCheck() was not documented, making it unclear why it was
    done that way.  Add a comment explaining that it ensures AFTER triggers
    on rows modified by the RI action are queued in the outer query's
    after-trigger context and fire only after all RI updates on the same
    row are complete.
    
    Author: Yugo Nagata <nagata@sraoss.co.jp>
    Reviewed-by: Kirill Reshke <reshkekirill@gmail.com>
    Reviewed-by: Surya Poondla <suryapoondla4@gmail.com>
    Discussion: https://postgr.es/m/20250331212648.ad4ab804559001d7f0788741@sraoss.co.jp


src/backend/utils/adt/ri_triggers.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c index d22b8ef7f3c..6230a2ea9ad 100644 --- a/src/backend/utils/adt/ri_triggers.c +++ b/src/backend/utils/adt/ri_triggers.c @@ -2582,7 +2582,13 @@ ri_PerformCheck(const RI_ConstraintInfo *riinfo, save_sec_context | SECURITY_LOCAL_USERID_CHANGE | SECURITY_NOFORCE_RLS); - /* Finally we can run the query. */ + /* + * Finally we can run the query. + * + * Set fire_triggers to false to ensure that AFTER triggers are queued in + * the outer query's after-trigger context and fire after all RI updates + * on the same row are complete, rather than immediately. + */ spi_result = SPI_execute_snapshot(qplan, vals, nulls, test_snapshot, crosscheck_snapshot, [parent: 45cdaf3665be]