46.9. Transaction Management
In a procedure called from the top level or an anonymous code block (DO
command) called from the top level it is possible to control transactions. To commit the current transaction, callplpy.commit()
. To roll back the current transaction, callplpy.rollback()
. (Note that it is not possible to run the SQL commandsCOMMIT
orROLLBACK
viaplpy.execute
or similar. It has to be done using these functions.) After a transaction is ended, a new transaction is automatically started, so there is no separate function for that.
Here is an example:
CREATE PROCEDURE transaction_test1()LANGUAGE plpythonuAS $$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();
Transactions cannot be ended when an explicit subtransaction is active.