42.10. Gestión de transacciones #

En un procedimiento llamado desde el nivel superior o en un bloque de código anónimo (comando DO) llamado desde el nivel superior, es posible controlar transacciones. Para confirmar la transacción actual, llama al comando commit. Para revertir la transacción actual, llama al comando rollback. (Ten en cuenta que no es posible ejecutar los comandos SQL COMMIT o ROLLBACK a través de spi_exec o similar. Debe hacerse utilizando estas funciones). Después de que finaliza una transacción, se inicia automáticamente una nueva transacción, por lo que no hay un comando separado para ello.

Aquí tienes un ejemplo:

CREATE PROCEDURE transaction_test1()
LANGUAGE pltcl
AS $$
for {set i 0} {$i < 10} {incr i} {
    spi_exec "INSERT INTO test1 (a) VALUES ($i)"
    if {$i % 2 == 0} {
        commit
    } else {
        rollback
    }
}
$$;

CALL transaction_test1();

Las transacciones no se pueden finalizar cuando una subtransacción explícita está activa.