The ANSI/ISO SQL standard defines four levels of transaction isolation in terms of three phenomena that must be prevented between concurrent transactions. These undesirable phenomena are:
A transaction reads data written by concurrent uncommitted transaction.
A transaction re-reads data it has previously read and finds that data has been modified by another committed transaction.
A transaction re-executes a query returning a set of rows that satisfy a search condition and finds that additional rows satisfying the condition has been inserted by another committed transaction.
The four isolation levels and the corresponding behaviors are described below.
Table 10-1. Postgres Isolation Levels
Dirty Read | Non-Repeatable Read | Phantom Read | |
---|---|---|---|
Read uncommitted | Possible | Possible | Possible |
Read committed | Not possible | Possible | Possible |
Repeatable read | Not possible | Not possible | Possible |
Serializable | Not possible | Not possible | Not possible |