http://www.postgresql.org/docs/9.2/static/transaction-iso.html
Der wiederholbare Lesemodus bietet eine strenge Garantie dafür, dass jede Transaktion eine vollständig stabile Ansicht der Datenbank sieht. Diese Ansicht ist jedoch nicht unbedingt immer mit einer seriellen (einzelnen) Ausführung gleichzeitiger Transaktionen derselben Ebene konsistent. Beispielsweise wird bei einer schreibgeschützten Transaktion auf dieser Ebene möglicherweise ein Kontrolldatensatz aktualisiert, um anzuzeigen, dass ein Stapel abgeschlossen wurde, jedoch nicht einer der Detaildatensätze, der logisch Teil des Stapels ist, da eine frühere Revision des Kontrolldatensatzes gelesen wurde . Versuche, Geschäftsregeln durch Transaktionen durchzusetzen, die auf dieser Isolationsstufe ausgeführt werden, funktionieren ohne sorgfältige Verwendung expliziter Sperren zum Blockieren widersprüchlicher Transaktionen wahrscheinlich nicht ordnungsgemäß.
Ist das nicht ein Phantom-Lesevorgang, der im wiederholbaren Lesemodus nicht möglich ist?
Die Dokumentation besagt, dass eine Abfrage in einer wiederholten Lesetransaktion zu Beginn der Transaktion einen Snapshot sieht. Wie kann es dann möglich sein, dass eine Abfrage inkonsistente Daten liest?
quelle
Phantom-Lesevorgänge (stellen Sie sicher, dass Sie dies nicht mit nicht wiederholbaren Lesevorgängen verwechseln) sind in der Isolationsstufe "Wiederholbarer Lesevorgang" möglich ... im Prinzip. Das De-facto-Verhalten von Postgresql bei Auswahl von "Wiederholbares Lesen" ist jedoch stärker als der Standard (fast eine "serialisierbare" Isolation), sodass Sie tatsächlich keine Phantom-Lesevorgänge haben. Docs :
Was ist nun mit dieser Einschränkung "Diese Ansicht wird nicht unbedingt immer mit einer seriellen (einer nach der anderen) Ausführung gleichzeitiger Transaktionen derselben Ebene übereinstimmen"? Ich denke (ich bin mir nicht sicher), dass dies bedeutet, dass der Snapshot "von außen" (zu Beginn der Transaktion behoben) möglicherweise Zeilen aus anderen Transaktionen enthalten kann, aber einige andere Zeilen aus derselben Transaktion nicht enthält.
quelle