Si te encuentras con alguna parte que te causa duda puedes comentarlo y trataremos de ayudarte lo mas rápido que podamos.
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 SAVEPOINT
el 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 WORK
no TRANSACTION
como 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 |