Em um procedimento chamado do nível superior, ou um bloco de código
anônimo (comando DO), chamado do nível superior,
é possível controlar as transações.
Para efetivar a transação corrente, deve-se chamar
plpy.commit().
Para desfazer a transação corrente, deve-se chamar
plpy.rollback().
(Note que não é possível executar os comandos SQL
COMMIT ou ROLLBACK via
plpy.execute, ou similar.
Tem que ser feito usando estas funções.)
Depois que uma transação é encerrada, uma nova transação é iniciada
automaticamente, portanto, não há uma função separada para isto.
A seguir está um exemplo:
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();
As transações não podem ser encerradas quando uma subtransação explícita está ativa.