41.10. Управление транзакциями#
41.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();
Транзакции не могут быть завершены, когда активна явная подтранзакция.