42.10. Управление транзакциями#

42.10. Управление транзакциями

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();

Транзакции не могут быть завершены, когда активна явная подтранзакция.