Перейти к основному содержимому

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

примечание

Эта страница переведена при помощи нейросети GigaChat.

В процедуре, вызываемой с верхнего уровня или анонимном блоке кода (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();

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