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
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,