トップレベル、またはトップレベルから呼ばれた無名コードブロック(DOコマンド)から呼ばれたプロシージャでは、トランザクションの制御が可能です。
現在のトランザクションをコミットするには、plpy.commit()を呼びます。
現在のロールバックするには、plpy.rollback()を呼びます。
(SQLコマンドのCOMMITやROLLBACKをplpy.executeなどを通して実行することはできない点に注意してください。前述の関数を使って行う必要があります。)
トランザクションが終了した後は新たなトランザクションが自動的に開始されますので、開始のための別の関数はありません。
以下に例を示します。
CREATE PROCEDURE transaction_test1()
LANGUAGE plpythonu
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();
トランザクションは明示的なサブトランザクションの中では終了できません。