postgres-github.git / summary / log / commit / refs

commit    5c54c3ed1b934a35a8e9eacff679699ccb3a5070
Author:   Amit Langote <amitlan@postgresql.org>
Date:     Mon Apr 06 23:36:49 2026 +0000

    Fix deferred FK check batching introduced by commit b7b27eb41a5
    
    That commit introduced AfterTriggerIsActive() to detect whether
    we are inside the after-trigger firing machinery, so that RI trigger
    functions can take the batched fast path.  It was implemented using
    query_depth >= 0, which correctly identified immediate trigger firing
    but missed the deferred case where query_depth is -1 at COMMIT via
    AfterTriggerFireDeferred().  This caused deferred FK checks to fall
    back to the per-row fast path instead of the batched path.
    
    The correct check is whether we are inside an after-trigger firing
    loop specifically.  Introduce afterTriggerFiringDepth, a counter
    incremented around the trigger-firing loops in AfterTriggerEndQuery,
    AfterTriggerFireDeferred, and AfterTriggerSetState, and decremented
    after FireAfterTriggerBatchCallbacks() returns.  AfterTriggerIsActive()
    now returns afterTriggerFiringDepth > 0.
    
    Reported-by: Chao Li <li.evan.chao@gmail.com>
    Author: Chao Li <li.evan.chao@gmail.com>
    Co-authored-by: Amit Langote <amitlangote09@gmail.com>
    Discussion: https://postgr.es/m/C2133B47-79CD-40FF-B088-02D20D654806@gmail.com

[parent: 98979578055f]