44.8. 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 las transacciones. Para confirmar la transacción actual, llama a plpy.commit(). Para revertir la transacción actual, llama a plpy.rollback(). (Ten en cuenta que no es posible ejecutar los comandos SQL COMMIT o ROLLBACK a través de plpy.execute o similares. 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 una función separada para eso.

Aquí tienes un ejemplo:

CREATE PROCEDURE transaction_test1()
LANGUAGE plpython3u
AS $$
for i in range(0, 10):
    plpy.execute("INSERT INTO test1 (a) VALUES (%d)" % i)
    if i % 2 == 0:
        plpy.commit()
    else:
        plpy.rollback()
$$;

CALL transaction_test1();

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