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