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

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

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

В процедуре, вызванной из верхнего уровня или из анонимного блока кода (DO команда), можно управлять транзакциями. Чтобы зафиксировать текущую транзакцию, вызовите plpy.commit(). Чтобы откатить текущую транзакцию, вызовите plpy.rollback(). (Обратите внимание, что невозможно выполнить SQL-команды COMMIT или ROLLBACK через plpy.execute или аналогичные. Это должно быть сделано с использованием этих функций). После завершения транзакции автоматически запускается новая транзакция, поэтому нет отдельной функции для этого.

Вот пример:

CREATE PROCEDURE transaction_test1()
LANGUAGE plpython3u
AS $$
for i in range(0, 10):
    plpy.execute("INSERT INTO test1 (a) VALUES (%d)" % i)
    if i % 2 == 0:
        plpy.commit()
    else:
        plpy.rollback()
$$;

CALL transaction_test1();

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