Provided by: postgresql-client-8.4_8.4.11-1_i386 bug

NAME

       ROLLBACK TO SAVEPOINT - roll back to a savepoint

SYNOPSIS

       ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] savepoint_name

DESCRIPTION

       Roll  back  all  commands  that  were  executed after the savepoint was
       established. The savepoint remains valid and  can  be  rolled  back  to
       again later, if needed.

       ROLLBACK  TO  SAVEPOINT  implicitly  destroys  all savepoints that were
       established after the named savepoint.

PARAMETERS

       savepoint_name
              The savepoint to roll back to.

NOTES

       Use RELEASE SAVEPOINT [release_savepoint(7)]  to  destroy  a  savepoint
       without  discarding  the  effects  of  commands  executed  after it was
       established.

       Specifying a savepoint name that has not been established is an error.

       Cursors  have  somewhat  non-transactional  behavior  with  respect  to
       savepoints. 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  command inside a savepoint that is later rolled
       back, the cursor position remains at the position that  FETCH  left  it
       pointing  to  (that is, FETCH is not rolled back).  Closing a cursor is
       not undone by rolling back, either.  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.

SEE ALSO

       BEGIN    [begin(7)],    COMMIT    [commit(7)],    RELEASE     SAVEPOINT
       [release_savepoint(7)],      ROLLBACK      [rollback(7)],     SAVEPOINT
       [savepoint(7)]