http://www.postgresql.org/docs/9.2/static/transaction-iso.html
Tryb powtarzalnego odczytu zapewnia rygorystyczną gwarancję, że każda transakcja widzi całkowicie stabilny widok bazy danych. Jednak ten widok niekoniecznie musi być spójny z niektórymi szeregowymi (pojedynczymi) realizacjami równoczesnych transakcji na tym samym poziomie. Na przykład, nawet transakcja tylko do odczytu na tym poziomie może zobaczyć rekord kontroli zaktualizowany, aby pokazać, że partia została ukończona, ale nie może zobaczyć jednego z rekordów szczegółowych, który jest logicznie częścią partii, ponieważ odczytał wcześniejszą wersję rekordu kontroli . Próby egzekwowania reguł biznesowych przez transakcje działające na tym poziomie izolacji prawdopodobnie nie będą działać poprawnie bez ostrożnego użycia jawnych blokad w celu blokowania sprzecznych transakcji.
Czy to nie jest odczyt fantomowy, co nie jest możliwe w trybie powtarzalnego odczytu?
Dokumentacja mówi, że zapytanie w powtarzalnej transakcji odczytu widzi migawkę od początku transakcji, to w jaki sposób zapytanie może odczytać niespójne dane?
źródło
Odczyty fantomowe (pamiętaj, aby tego nie mylić z odczytami niepowtarzalnymi) są możliwe na poziomie izolacji „Powtarzalne czytanie” ... w zasadzie. Ale faktyczne zachowanie Postgresqla po wybraniu opcji „Powtarzalne czytanie” jest silniejsze niż standardowe (prawie izolacja „szeregowa”), tak że w rzeczywistości nie będziesz mieć odczytów fantomowych. Dokumenty :
A co z tym zastrzeżeniem „ten widok niekoniecznie zawsze będzie spójny z niektórymi szeregowymi (pojedynczymi) realizacjami równoczesnych transakcji na tym samym poziomie”? Myślę (nie jestem pewien), co oznacza, że oznacza to, że migawka „z zewnątrz” (ustalona na początku transakcji) może ostatecznie zawierać wiersze z innych transakcji, ale nie zawierać niektórych innych wierszy z tej samej transakcji.
źródło