Niveau d'isolation en série

Serializable permet le plus haut niveau d'isolation des transactions. Quand une transaction est au niveau sérialisable, une requête ne voit que les données validées avant que la transaction débute et ne voit jamais les changements des dirty data ou des transactions concurrentes validées pendant l'exécution de la transaction. Ainsi, ce niveau émule l'exécution des transactions en série, comme si les transactions étaient exécutées l'une après l'autre, en série, plutôt que concurremment.

Si une ligne renvoyée par une requête pendant qu'une clause UPDATE (ou DELETE ou SELECT FOR UPDATE) est en train d'être mise à jour par une transaction concurrente non-validée alors la seconde transaction qui effectue tri pour la mise à jour de cette ligne attendra l'autre transaction pour valider ou annuler. Dans le cas d'une annulation, la transaction en attente peut procéder à la modification de la ligne. Dans le cas d'une tranaction concurrente validée, une transaction sérialisable sera annulée avec le message :
ERROR:  Can't serialize access due to concurrent update
    
parcequ'une transaction sérialisable ne peut pas modifier les lignes changées par d'autres transactions après que la transaction sérialisable ait débuté.

Note

Notez que le résultats de l'exécution de SELECT ou INSERT (avec une requête) ne seront pas affectées par les transactions concurrentes.