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.