ROLLBACK_TO_SAVEPOINT(7pg15)
π 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
FETCHorMOVEcommand inside a savepoint that is later rolled back, the cursor remains at the position thatFETCHleft it pointing to (that is, the cursor motion caused byFETCHis 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-executestate, so while the transaction can be restored usingROLLBACK 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 π«Ά
BEGIN(7)COMMIT(7)RELEASE SAVEPOINT (RELEASE_SAVEPOINT(7))ROLLBACK(7)SAVEPOINT(7)
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
- opensuse-leap 16.0: postgresql15 15.19-160000.1.1 Β· PostgreSQL
- opensuse-leap 16.0: postgresql15 15.19-160000.1.1 Β· PostgreSQL
- opensuse-leap 16.0: postgresql15 15.19-160000.1.1 Β· PostgreSQL
- opensuse-leap 16.0: postgresql15 15.19-160000.1.1 Β· PostgreSQL
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms