ROLLBACK TO SAVEPOINT: retroceder a un punto de guardado

Sinopsis

ROLLBACK[WORK|TRANSACTION]TO[SAVEPOINT] savepoint_name

Descripción

Revierta todos los comandos que se ejecutaron después de establecer el punto de guardado. El punto de guardado sigue siendo válido y se puede revertir más tarde, si es necesario.

ROLLBACK TO SAVEPOINT destruye implícitamente todos los puntos de guardado que se establecieron después del punto de guardado nombrado.

Parámetros

savepoint_name

El punto de guardado al que volver.

notas

Use RELEASE SAVEPOINT para destruir un punto de guardado sin descartar los efectos de los comandos ejecutados después de que se haya establecido.

Especificar un nombre de punto de guardado que no se ha establecido es un error.

Los cursores tienen un comportamiento algo no transaccional con respecto a los puntos de guardado. Cualquier cursor que se abra dentro de un punto de guardado se cerrará cuando se revierta el punto de guardado. Si un cursor previamente abierto se ve afectado por un FETCH o MOVE comando dentro de un punto de guardado que luego se deshace, el cursor permanece en la posición que FETCH lo dejó apuntando a (es decir, el movimiento del cursor causado por FETCH no se revierte). Cerrar un cursor tampoco se deshace retrocediendo. Sin embargo, otros efectos secundarios causados ​​por la consulta del cursor (como los efectos secundarios de las funciones volátiles llamadas por la consulta) están revierten si ocurren durante un punto de guardado que luego se revierte. Un cursor cuya ejecución hace que se cancele una transacción se pone en un estado de no ejecución, por lo que si bien la transacción se puede restaurar usando ROLLBACK TO SAVEPOINTel cursor ya no se puede utilizar.

Ejemplos

Para deshacer los efectos de los comandos ejecutados después my_savepoint fue establecido:

ROLLBACKTOSAVEPOINT my_savepoint;

Las posiciones del cursor no se ven afectadas por la reversión del punto de guardado:

BEGIN;DECLARE foo CURSORFORSELECT1UNIONSELECT2;SAVEPOINT foo;FETCH1FROM foo;
 ?column? 
----------1ROLLBACKTOSAVEPOINT foo;FETCH1FROM foo;
 ?column? 
----------2COMMIT;

Compatibilidad

El estándar SQL especifica que el key palabra SAVEPOINT es obligatorio, pero PostgreSQL y Oracle permiten que se omita. SQL solo permite WORKno TRANSACTIONcomo una palabra irrelevante después ROLLBACK. Además, SQL tiene una cláusula opcional AND [ NO ] CHAIN que actualmente no es compatible con PostgreSQL. De lo contrario, este comando se ajusta al estándar SQL.

Ver también

COMENZAR, COMPROMETER, LIBERAR SAVEPOINT, ROLLBACK, SAVEPOINT

Anterior Arriba Próximo
RETROCESO PREPARADO Casa PUNTO DE GUARDADO