PostgreSQL Transactions (ACID Properties and Implementation, How to Control Transactions)

What is a Transaction?

In databases, a transaction is a set of consistent operations intended to ensure data consistency and reliability. Transactions are typically triggered by applications to execute a series of operations before rolling back to a specific state if necessary.

ACID Properties

ACID (Atomicity、Consistency、Isolation 和 Durability) is currently the most widely accepted transaction management model.

Atomicity

Atomicity refers to the fact that all operations within a transaction must succeed before being committed to the database. Even if an issue arises at any point during the transaction, it should revert to its original state.

Consistency

Consistency refers to the consistency of data in the database after a transaction is executed. A transaction should always maintain the integrity of data in the database.

Isolation

Isolation refers to the ability for multiple transactions to execute concurrently while independently completing their tasks, ensuring that no transaction's execution is affected by others regardless of which one is currently running.

Durability

Durability means that once a transaction is committed to the database, it will not be lost. Even if the system encounters a failure, data written most recently will be stored on disk.

PostgreSQL Transaction Management

PostgreSQL supports all ACID property-based transaction management models, including:

  • savepoints: Used to define a point within a transaction that can be used to roll back or interrupt the transaction.
  • lock modes: Provides various lock modes to control how data is accessed during the current transaction.

Savepoints (Savepoints)

In PostgreSQL, savepoints are available for defining points in transactions. A savepoint can be rolled back without affecting other savepoints or the entire transaction.

Controlling Transactions

PostgreSQL provides several methods to control transactions:

  • ROLLBACK: Rollback a committed transaction.
  • ABORT: Terminate an uncommitted transaction.
  • COMMIT: Commit the current transaction to the database.

Examples

-- Begin a new transaction
BEGIN;

-- Perform some operations
INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');
INSERT INTO orders (user_id, product_name) VALUES (1, 'Product A');

-- Commit the transaction
COMMIT;
-- Begin a new transaction
BEGIN;

-- Insert some data into the database
INSERT INTO users (name, email) VALUES ('Jane Doe', 'jane@example.com');

-- Roll back to the beginning of the transaction
SAVEPOINT my_savepoint;

-- Delete the inserted row
DELETE FROM users WHERE name = 'Jane Doe';

-- Roll back to the savepoint
ROLLBACK TO SAVEPOINT my_savepoint;

-- Release the savepoint
RELEASE SAVEPOINT my_savepoint;

In summary, PostgreSQL provides a powerful transaction management system that helps ensure data consistency and reliability in databases.