42.10. Управление транзакциями #
В процедуре, которая вызывается в коде верхнего уровня или в анонимном блоке кода (в команде DO
), можно управлять транзакциями. Чтобы зафиксировать текущую транзакцию, выполните команду commit
, а чтобы откатить — rollback
. (Заметьте, что выполнить 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();
Транзакции не могут завершаться, когда имеется открытая явная подтранзакция.