http://www.postgresql.org/docs/9.2/static/transaction-iso.html
Mode Baca Berulang memberikan jaminan ketat bahwa setiap transaksi melihat tampilan database yang sepenuhnya stabil. Namun, pandangan ini tidak harus selalu konsisten dengan beberapa serial (satu per satu) eksekusi transaksi bersamaan dari tingkat yang sama. Misalnya, bahkan transaksi hanya baca pada level ini dapat melihat catatan kontrol diperbarui untuk menunjukkan bahwa batch telah selesai tetapi tidak melihat salah satu catatan detail yang secara logis bagian dari batch karena membaca revisi sebelumnya dari catatan kontrol . Upaya untuk menegakkan aturan bisnis dengan transaksi yang berjalan pada tingkat isolasi ini tidak akan berfungsi dengan benar tanpa menggunakan kunci eksplisit secara cermat untuk memblokir transaksi yang bertentangan.
Bukankah itu membaca hantu, yang tidak mungkin dalam mode baca berulang?
Dokumentasi mengatakan bahwa kueri dalam transaksi baca berulang melihat snapshot pada awal transaksi, lalu bagaimana mungkin bagi permintaan untuk membaca data yang tidak konsisten?
sumber
Phantom reads (pastikan untuk tidak membingungkan ini dengan reads non-repeatable) dimungkinkan pada level isolasi "Repeatable read" ... pada prinsipnya. Tetapi perilaku de-facto Postgresql ketika Anda memilih "Repeatable read" lebih kuat dari standar, (hampir merupakan isolasi "Serializable"), sehingga, pada kenyataannya Anda tidak akan memiliki phantom yang dibaca. Docs :
Sekarang, bagaimana dengan peringatan itu "pandangan ini tidak selalu harus konsisten dengan beberapa serial (satu per satu) eksekusi transaksi bersamaan dari tingkat yang sama"? Saya pikir (saya tidak yakin) itu berarti bahwa itu berarti snapshot "dari luar" (ditetapkan pada awal transaksi) pada akhirnya dapat menyertakan baris dari transaksi lain tetapi gagal untuk memasukkan beberapa baris lain dari transaksi yang sama.
sumber