Dans une procédure appelée au haut niveau ou dans un bloc de code anonyme
(commande DO) appelé au haut niveau, il est possible
de contrôler les transactions. Pour valider la transaction en cours,
appelez la commande commit command. Pour annuler la
transaction en cours, appelez la commande rollback.
(Notez qu'il n'est pas possible d'exécuter les commandes SQL
COMMIT ou ROLLBACK via
spi_exec ou similaire. Cela doit se faire en
utilisant ces fonctions.) À la fin d'une transaction, une nouvelle
transaction est automatiquement démarrée, donc il n'existe pas de
commande séparée pour ça.
Voici un exemple :
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();
Les transactions ne peuvent pas être terminées quand une sous-transaction explicite est active.