★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

46.9. トランザクション制御

トップレベル、またはトップレベルから呼ばれた無名コードブロック(DOコマンド)から呼ばれたプロシージャでは、トランザクションの制御が可能です。 現在のトランザクションをコミットするには、plpy.commit()を呼びます。 現在のロールバックするには、plpy.rollback()を呼びます。 (SQLコマンドのCOMMITROLLBACKplpy.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();

トランザクションは明示的なサブトランザクションの中では終了できません。