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