RELEASE SAVEPOINT

RELEASE SAVEPOINT — libera un punto de salvaguarda (savepoint) definido previamente

Synopsis

RELEASE [ SAVEPOINT ] savepoint_name

Descripción

RELEASE SAVEPOINT libera el punto de salvaguarda nombrado y todos los puntos de salvaguarda activos que se crearon después del mismo, y libera sus recursos. Todos los cambios realizados desde la creación del punto de salvaguarda que no hayan sido revertidos previamente se fusionan en la transacción o punto de salvaguarda que estaba activo cuando se creó el punto de salvaguarda nombrado. Los cambios realizados después de RELEASE SAVEPOINT también formarán parte de esta transacción o punto de salvaguarda activo.

Parámetros

savepoint_name

El nombre del punto de salvaguarda a liberar.

Notas

Especificar un nombre de punto de salvaguarda que no fue definido previamente es un error.

No es posible liberar un punto de salvaguarda cuando la transacción se encuentra en un estado abortado; para hacer eso, utiliza ROLLBACK TO SAVEPOINT.

Si múltiples puntos de salvaguarda tienen el mismo nombre, solo se libera el definido más recientemente que no haya sido liberado. Comandos repetidos liberarán progresivamente puntos de salvaguarda más antiguos.

Ejemplos

Para establecer y posteriormente liberar un punto de salvaguarda:

BEGIN;
    INSERT INTO table1 VALUES (3);
    SAVEPOINT my_savepoint;
    INSERT INTO table1 VALUES (4);
    RELEASE SAVEPOINT my_savepoint;
COMMIT;

La transacción anterior insertará tanto el valor 3 como el 4.

Un ejemplo más complejo con múltiples subtransacciones anidadas:

BEGIN;
    INSERT INTO table1 VALUES (1);
    SAVEPOINT sp1;
    INSERT INTO table1 VALUES (2);
    SAVEPOINT sp2;
    INSERT INTO table1 VALUES (3);
    RELEASE SAVEPOINT sp2;
    INSERT INTO table1 VALUES (4))); -- genera un error

En este ejemplo, la aplicación solicita la liberación del punto de salvaguarda sp2, el cual insertó el valor 3. Esto cambia el contexto de transacción de la inserción a sp1. Cuando la sentencia que intenta insertar el valor 4 genera un error, las inserciones de 2 y 4 se pierden debido a que están en el mismo punto de salvaguarda, ahora revertido, y el valor 3 está en el mismo contexto de transacción. La aplicación ahora solo puede elegir uno de estos dos comandos, ya que todos los demás comandos serán ignorados:

ROLLBACK;
ROLLBACK TO SAVEPOINT sp1;

Elegir ROLLBACK abortará todo, incluyendo el valor 1, mientras que ROLLBACK TO SAVEPOINT sp1 retendrá el valor 1 y permitirá que la transacción continúe.

Compatibilidad

Este comando cumple con el estándar SQL. El estándar especifica que la palabra clave SAVEPOINT es obligatoria, pero PostgreSQL permite que se omita.

Véase también

BEGIN, COMMIT, ROLLBACK, ROLLBACK TO SAVEPOINT, SAVEPOINT