44.8. Gerenciamento de transação #

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.