★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

9.2. トランザクションの隔離

ANSI/ISO SQL規格は、同時に実行されるトランザクション間で防ぐべき3つの現象ごとに、トランザクション隔離のレベルを4レベルに分けて定義しています。3つの望ましくない現象とは下記のものです。

ダーティリード

同時に実行されている他のトランザクションが書き込んだ、まだコミットされていないデータを読み込んでしまう。

反復不能読み取り

トランザクションが、以前読み込んだデータを再度読み込む際、そのデータを別のトランザクションが更新しコミットしたことによって、以前のデータではなく、新しいデータを得てしまう。

ファントムリード

トランザクションが、ある行の集合を返す検索条件で問い合わせを再実行したとき、別のトランザクションがその問い合わせ条件を満たす行を変更し、コミットしてしまったために、同じ検索条件で問い合わせを実行しても異なる結果を得てしまう。

4つの隔離レベルとその Table 9-1で示した動作との対応は次の表のようになります。

Table 9-1. SQL トランザクション隔離レベル

隔離レベル ダーティリード 反復不能読み取り ファントムリード
Read uncommitted 可能性あり 可能性あり 可能性あり
Read committed 安全 可能性あり 可能性あり
Repeatable read 安全 安全 可能性あり
Serializable 安全 安全 安全

PostgreSQLはRead CommittedとSerializableの2つの隔離レベルを備えています。