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

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

примечание

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

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

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