44.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();
Транзакцию нельзя завершить в случае существования открытой явной подтранзакции.