Commit dc588058 authored by Tom Lane's avatar Tom Lane

Clarify what's supposed to happen when a cursor FETCH is rolled back

by aborting a subtransaction.  Per discussion with Heikki.
parent 8c1c2e38
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/rollback_to.sgml,v 1.10 2008/11/14 10:22:47 petere Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/rollback_to.sgml,v 1.11 2009/12/02 21:11:12 tgl Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -77,11 +77,14 @@ ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] <replaceable>savepoint_name</re ...@@ -77,11 +77,14 @@ ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] <replaceable>savepoint_name</re
Cursors have somewhat non-transactional behavior with respect to Cursors have somewhat non-transactional behavior with respect to
savepoints. Any cursor that is opened inside a savepoint will be closed savepoints. Any cursor that is opened inside a savepoint will be closed
when the savepoint is rolled back. If a previously opened cursor is when the savepoint is rolled back. If a previously opened cursor is
affected by a affected by a <command>FETCH</> or <command>MOVE</> command inside a
<command>FETCH</> command inside a savepoint that is later rolled savepoint that is later rolled back, the cursor remains at the
back, the cursor position remains at the position that <command>FETCH</> position that <command>FETCH</> left it pointing to (that is, the cursor
left it pointing to (that is, <command>FETCH</> is not rolled back). motion caused by <command>FETCH</> is not rolled back).
Closing a cursor is not undone by rolling back, either. 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) <emphasis>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 A cursor whose execution causes a transaction to abort is put in a
cannot-execute state, so while the transaction can be restored using cannot-execute state, so while the transaction can be restored using
<command>ROLLBACK TO SAVEPOINT</>, the cursor can no longer be used. <command>ROLLBACK TO SAVEPOINT</>, the cursor can no longer be used.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment