• Fujii Masao's avatar
    Fix psql's ON_ERROR_ROLLBACK so that it handles COMMIT AND CHAIN. · fe06819f
    Fujii Masao authored
    When ON_ERROR_ROLLBACK is enabled, psql releases a temporary savepoint
    if it's idle in a valid transaction block after executing a query. But psql
    doesn't do that after RELEASE or ROLLBACK is executed because a temporary
    savepoint has already been destroyed in that case.
    
    This commit changes psql's ON_ERROR_ROLLBACK so that it doesn't release
    a temporary savepoint also when COMMIT AND CHAIN is executed. A temporary
    savepoint doesn't need to be released in that case because
    COMMIT AND CHAIN also destroys any savepoints defined within the transaction
    to commit. Otherwise psql tries to release the savepoint that
    COMMIT AND CHAIN has already destroyed and cause an error
    "ERROR:  savepoint "pg_psql_temporary_savepoint" does not exist".
    
    Back-patch to v12 where transaction chaining was added.
    
    Reported-by: Arthur Nascimento
    Author: Arthur Nascimento
    Reviewed-by: Fujii Masao, Vik Fearing
    Discussion: https://postgr.es/m/16867-3475744069228158@postgresql.org
    fe06819f
common.c 52.8 KB