Bug reference: 18294 Logged by: Ondrej Bouda Email address: obouda@gk-software.com PostgreSQL version: 16.1 Operating system: Linux Description:
We come across a bug when it is not possible to roll back to a manual savepoint. The rollback fails with error: Error during rollback to savepoint. org.postgresql.util.PSQLException: ERROR: savepoint "SAVE_TEST_01" does not exist
Steps to reproduce: 1/ Connect via JDBC with JDBC params autosave=always&cleanupSavepoints=true. 2/ Create a manual savepoint: savepoint SAVE_TEST_01; 3/ Try to roll back => error: rollback to SAVE_TEST_01;
The error occurs when using SQL statements as well as when using the JDBC API for savepoint/rollback (Connection.setSavepoint + Connection.rollback).
The documentation for the cleanupSavepoints parameter reads: "Determines if the SAVEPOINT created in autosave mode is released prior to the statement." * https://jdbc.postgresql.org/documentation/use/ * I would understand the doc in the way that it should affect just and only the savepoint created by the driver due to the autosave=true param (therefore, manual savepoints should not be affected).
Thank you for the report.
Unfortunately, the way Postgresql works as per
RELEASE SAVEPOINT releases the named savepoint and all active savepoints that were created after the named savepoint, and frees their resources. All changes made since the creation of the savepoint that didn't already get rolled back are merged into the transaction or savepoint that was active when the named savepoint was created. Changes made after RELEASE SAVEPOINT will also be part of this active transaction or savepoint.