ROLLBACK_TO_SAVEPOINT(7pg15)

πŸ“¦ version 15.19, in opensuse-leap 16.0

πŸ’– NAME πŸ’–

okay so bestie, welcome to ROLLBACK_TO_SAVEPOINT(7) from the PostgreSQL 15.19 Documentation ✨ this is the manual page for ROLLBACK_TO_SAVEPOINT β€” literally the roll back to a savepoint command, and yes she is iconic πŸ’…

🌸 SYNOPSIS 🌸

ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] savepoint_name

πŸ¦‹ DESCRIPTION πŸ¦‹

This one rolls back all commands that were executed after the savepoint was established. The savepoint stays valid and can be rolled back to again later, if needed β€” no cap.

The way that ROLLBACK TO SAVEPOINT implicitly destroys all savepoints that were established after the named savepoint? periodt. gone. bye. πŸ’€

πŸŽ€ PARAMETERS πŸŽ€

  • savepoint_name β€” the savepoint to roll back to. that's the one, bestie 🫢

✨ NOTES ✨

Use RELEASE SAVEPOINT to destroy a savepoint without discarding the effects of commands executed after it was established. very demure, very mindful.

Specifying a savepoint name that has not been established is an error. so don't try to gaslight the database into thinking it exists, fr fr πŸ’€

Cursors have somewhat non-transactional behavior with respect to savepoints. here's the tea β˜•:

  • Any cursor that is opened inside a savepoint will be closed when the savepoint is rolled back.
  • If a previously opened cursor is affected by a FETCH or MOVE command inside a savepoint that is later rolled back, the cursor remains at the position that FETCH left it pointing to (that is, the cursor motion caused by FETCH is not rolled back).
  • Closing a cursor is not undone by rolling back, either.
  • However, other side-effects caused by the cursor's query (such as side-effects of volatile functions called by the query) are rolled back if they occur during a savepoint that is later rolled back.
  • A cursor whose execution causes a transaction to abort is put in a cannot-execute state, so while the transaction can be restored using ROLLBACK TO SAVEPOINT, the cursor can no longer be used.

🌈 EXAMPLES 🌈

To undo the effects of the commands executed after my_savepoint was established:

ROLLBACK TO SAVEPOINT my_savepoint;

Cursor positions are not affected by savepoint rollback:

BEGIN;

DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2;

SAVEPOINT foo;

FETCH 1 FROM foo;
 ?column?
----------
        1

ROLLBACK TO SAVEPOINT foo;

FETCH 1 FROM foo;
 ?column?
----------
        2

COMMIT;

πŸ’œ COMPATIBILITY πŸ’œ

The SQL standard specifies that the key word SAVEPOINT is mandatory, but PostgreSQL and Oracle allow it to be omitted. SQL allows only WORK, not TRANSACTION, as a noise word after ROLLBACK. Also, SQL has an optional clause AND [ NO ] CHAIN which is not currently supported by PostgreSQL. Otherwise, this command conforms to the SQL standard. slay for standards compliance, honestly πŸ‘‘

🫢 SEE ALSO 🫢


okay that's the whole vibe πŸ’– this page is from PostgreSQL 15.19, dated 2026 β€” go forth and roll back responsibly, bestie πŸŽ€βœ¨

πŸ“¦ where this page comes from