В процедуре, вызванной с верхнего уровня, или в анонимном блоке кода
(командаDO ), вызванном с верхнего уровня, можно управлять транзакциями. Чтобы зафиксировать текущую транзакцию, вызовите
commit command. Для отката текущей транзакции
вызовите функцию rollback command. (Обратите внимание, что выполнение SQL-команд COMMIT или
ROLLBACK через spi_exec или аналогичные средства невозможно. Это необходимо делать с помощью данных функций.) После завершения транзакции автоматически начинается новая, поэтому отдельной команды для этого не требуется.
Пример:
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();
Транзакции нельзя завершить при наличии активной явной подтранзакции.