PostgreSQLでREAD COMMITTEDかつSELECTに必ずFOR SHARE/UPDATEを付けた場合、各Anomalyが発生し得るかどうか検討してみたけど、これで合っているだろうか。
- Dirty Read Anomaly: 発生しない。
- Read Skew Anomaly: 発生しない。
- Lost Update: 発生しない(デッドロック)。
- Inconsistent Read Anomaly:
* 存在しなかった行が存在するようになる(phantom read): 発生し得る。
* 存在した行が変更される: 発生しない。
- Write Skew Anomaly:
* INSERTの場合: 発生し得る。
* UPDATEの場合: 発生しない(デッドロック)。
- Read Only Anomaly: 発生しない?