42.10. Gerenciamento de transação #

Em um procedimento chamado de nível superior, ou em um bloco de código anônimo (comando DO) chamado de nível superior, é possível controlar as transações. Para efetivar a transação corrente, é executado o comando commit. Para desfazer a transação corrente, é executado o comando rollback. (Note não ser possível executar os comandos SQL COMMIT ou ROLLBACK via spi_exec, ou similar. Tem que ser feito usando estas funções.) Após o término de uma transação, é iniciada uma nova transação automaticamente, portanto não existe um comando separado para isto.

A seguir está um exemplo:

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();

As transações não podem ser encerradas enquanto uma subtransação explícita estiver ativa.