• Tom Lane's avatar
    Restore the portal-level snapshot for simple expressions, too. · d102aafb
    Tom Lane authored
    Commits 84f5c290 et al missed the need to cover plpgsql's "simple
    expression" code path.  If the first thing we execute after a
    COMMIT/ROLLBACK is one of those, rather than a full-fledged SPI command,
    we must explicitly do EnsurePortalSnapshotExists() to make sure we have
    an outer snapshot.  Note that it wouldn't be good enough to just push a
    snapshot for the duration of the expression execution: what comes back
    might be toasted, so we'd better have a snapshot protecting it.
    
    The test case demonstrating this fact cheats a bit by marking a SQL
    function immutable even though it fetches from a table.  That's
    nothing that users haven't been seen to do, though.
    
    Per report from Jim Nasby.  Back-patch to v11, like the previous fix.
    
    Discussion: https://postgr.es/m/378885e4-f85f-fc28-6c91-c4d1c080bf26@amazon.com
    d102aafb
plpgsql_transaction.sql 10.3 KB