Updated on 2024-05-07 GMT+08:00

PREPARE TRANSACTION

Function

Prepares the current transaction for two-phase commit.

After this statement, the transaction is no longer associated with the current session; instead, its state is fully stored on disk, and there is a high probability that it can be committed successfully, even if a database crash occurs before the commit is requested.

Once prepared, a transaction can later be committed or rolled back with COMMIT PREPARED or ROLLBACK PREPARED, respectively. Those statements can be issued from any session, not only the one that executed the original transaction.

From the point of view of the issuing session, PREPARE TRANSACTION is not unlike a ROLLBACK statement: after executing it, there is no active current transaction, and the effects of the prepared transaction are no longer visible. (The effects will become visible again if the transaction is committed.)

If the PREPARE TRANSACTION statement fails for any reason, it becomes a ROLLBACK and the current transaction is canceled.

Precautions

  • The transaction function is maintained automatically by the database, and should be not visible to users.
  • When running the PREPARE TRANSACTION statement, increase the value of max_prepared_transactions in configuration file postgresql.conf. You are advised to set it to a value not less than that of max_connections so that one pending prepared transaction is available for each session.

Syntax

PREPARE TRANSACTION transaction_id;

Parameter Description

transaction_id

Specifies an arbitrary identifier that later identifies this transaction for COMMIT PREPARED or ROLLBACK PREPARED. The identifier must be different from those for current prepared transactions.

Value range: The identifier must be written as a string literal, and must be less than 200 bytes long.

Examples

-- Start.
gaussdb=# BEGIN;
BEGIN

-- Prepare a transaction whose identifier is trans_test.
gaussdb=# PREPARE TRANSACTION 'trans_test';
PREPARE TRANSACTION