The SQL standard defines four levels of transaction isolation; the most strict is Serializable, and the other three are defined in terms of phenomena resulting from interaction between concurrent transactions which must not occur at each level: dirty read (a transaction reads data written by a concurrent uncommitted transaction), nonrepeatable read (a transaction re-reads data it has previously read and finds it modified by another transaction that committed since the initial read), phantom read (a transaction re-executes a query and finds the set of rows satisfying its search condition has changed due to another recently-committed transaction), and serialization anomaly (the result of successfully committing a group of transactions is inconsistent with all possible orderings of running those transactions one at a time). In PostgreSQL you can request any of the four standard isolation levels with SET TRANSACTION, but internally only three distinct isolation levels are implemented: PostgreSQL's Read Uncommitted mode behaves like Read Committed. Read Committed is the default isolation level in PostgreSQL; a SELECT query sees only data committed before the query began and never sees uncommitted data or changes committed by concurrent transactions while the query runs. The Serializable level provides the strictest transaction isolation, emulating serial transaction execution for all committed transactions as if they had been executed one after another, and applications using this level must be prepared to retry transactions due to serialization failures. Scope: PostgreSQL current-release documentation. Reviewed October 4, 2026.
Transaction isolation levels under concurrency
Document v1 · published by Koskamo editorial · updated 2026-10-04
Source and provenance
- Original source
- www.postgresql.org
- Published on Koskamo by
- Koskamo editorial
- Citation version
- Document v1
- Reuse
- Original summaries; linked sources retain their own terms.