Transaction error codes in YSQL

Due to the strong ACID properties guaranteed by YugabyteDB, failures during transactions are inevitable. You need to design your applications to take appropriate action on failed statements to ensure they are highly available. YugabyteDB returns various error codes for errors that occur during transaction processing.

The following error codes typically occur during transaction processing.

25001: Active SQL transaction

This error occurs when certain statements that should be run outside a transaction block, typically because they have non-rollback-able side effects or do internal commits, are executed inside a transaction block. For example, issuing a BEGIN statement inside a transaction.

WARNING:  25001: there is already a transaction in progress

25001 errors are just warnings. But the code needs to be fixed to avoid future warnings.

25006: Read only SQL transaction

This error occurs when certain statements are executed in a read-only transaction that violate the read-only constraint. For example, modifying records inside a read-only transaction.

ERROR:  25006: cannot execute UPDATE in a read-only transaction

25006 errors are Non-retriable. Writes should be removed from the read-only transaction code.

25P01: No active SQL transaction

This error occurs when certain statements that should be executed in a transaction are executed outside of a transaction. For example, issuing a ROLLBACK outside a transaction.

WARNING:  25P01: there is no transaction in progress

25P01 errors are just warnings. But the code needs to be fixed to avoid future warnings.

25P02: In failed SQL transaction

This error occurs when statements have failed inside a transaction and another statement other than COMMIT or ROLLBACK is executed.

ERROR:  25P02: current transaction is aborted, commands ignored until end of transaction block

25P02 errors are Non-retriable. Proper error handling via a try..catch block and either COMMIT or ROLLBACK should be executed appropriately.

25P03: Idle in transaction session timeout

This occurs when an application stays idle longer than idle_in_transaction_session_timeout in the middle of a transaction.

FATAL:  25P03: terminating connection due to idle-in-transaction timeout

The client can reconnect to the server and retry the transaction.

40001: Serialization failure

This error occurs when a transaction cannot be applied or progress further because of other conflicting transactions. For example, when multiple transactions are modifying the same key.

ERROR:  40001: Operation expired: Transaction XXXX expired or aborted by a conflict

Serialization failure errors can be retried by the client. See Client-side retry.

2D000: Invalid transaction termination

This error occurs when a transaction is terminated either by a COMMIT or a ROLLBACK in an invalid location. For example, when a COMMIT is issued inside a stored procedure that is called from inside a transaction.

ERROR:  2D000: invalid transaction termination

2D000 errors are Non-retriable. The transaction code needs to be fixed to get around this error.

3B001: Invalid savepoint specification

This error occurs when you try to ROLLBACK to or RELEASE a savepoint that has not been defined.

ERROR:  3B001: savepoint "FIRST_SAVE" does not exist

3B001 errors are Non-retriable. The transaction code needs to be fixed to specify the correct savepoint name to fix this error.

Learn more