• Etsuro Fujita's avatar
    postgres_fdw: Fix handling of a pending asynchronous request in postgresReScanForeignScan(). · d1cca944
    Etsuro Fujita authored
    Commit 27e1f145 failed to process a pending asynchronous request made
    for a given ForeignScan node in postgresReScanForeignScan() (if any) in
    cases where we would only reset the next_tuple counter in that function,
    contradicting the assumption that there should be no pending
    asynchronous requests that have been made for async-capable subplans for
    the parent Append node after ReScan.  This led to an assert failure in
    an assert-enabled build.  I think this would also lead to mis-rewinding
    the cursor in that function in the case where we have already fetched
    one batch for the ForeignScan node and the asynchronous request has been
    made for the second batch, because even in that case we would just reset
    the counter when called from that function, so we would fail to execute
    MOVE BACKWARD ALL.
    
    To fix, modify that function to process the asynchronous request before
    restarting the scan.
    
    While at it, add a comment to a function to match other places.
    
    Per bug #17344 from Alexander Lakhin.  Back-patch to v14 where the
    aforesaid commit came in.
    
    Patch by me.  Test case by Alexander Lakhin, adjusted by me.  Reviewed
    and tested by Alexander Lakhin and Dmitry Dolgov.
    
    Discussion: https://postgr.es/m/17344-226b78b00de73a7e@postgresql.org
    d1cca944
postgres_fdw.sql 140 KB