【PostgreSQL】 トランザクション



トランザクション分離レベル

ANSI規格では...

1) READ UNCOMMITTED
2) READ COMMITTED ★PostgreSQLサポート★
3) REPEATABLE READ
4) EPEATABLE READ ★PostgreSQLサポート★

トランザクションの望ましくない現象

a) ダーティーリード
まだコミットされていないトランザクションが書き込んだデータを、別のトランザクションが読み込む現象。

b) ファジーリード
あるトランザクションが以前に読み込んだデータをもう一度読み込んだときに、コミットされた別のトランザクションによってそのデータが変更または削除される現象。

c) ファントムリード
あるトランザクションが検索条件を満たす一連の行を返却する問合せを2度実行する間に、コミットされた別のトランザクションによってその条件を満たす新しい行が挿入される現象。

分離レベルとの関係

分離レベル       ダーティリード   反復不能読み取り   ファントムリード
--------------------------------+------------------+-----------------
READ UNCOMMITTED      あり           あり                 あり
READ COMMITTED        なし           あり                 あり
REPEATABLE READ       なし           なし                 あり
EPEATABLE READ        なし           なし                 なし
http://www.postgresql.jp/document/9.3/html/transaction-iso.html
http://thinkit.co.jp/free/article/0603/10/3/
http://d.hatena.ne.jp/language_and_engineering/20110104/p1