Cu ce niveluri de izolare a tranzacțiilor în PostgreSQL te-ai confruntat?
sobes.tech AI
Răspuns de la AI
PostgreSQL suportă patru niveluri standard de izolare a tranzacțiilor:
-
Read Uncommitted — cel mai scăzut nivel de izolare, în care o tranzacție poate vedea modificări neconfirmate ale altor tranzacții. În PostgreSQL, se comportă practic ca Read Committed.
-
Read Committed — nivelul implicit. Tranzacția vede doar modificările confirmate la momentul fiecărei interogări individuale din tranzacție. Datele pot fi modificate între interogări în aceeași tranzacție.
-
Repeatable Read — tranzacția vede o fotografie a datelor la momentul începerii sale. Toate interogările din tranzacție văd aceleași date, chiar dacă alte tranzacții le modifică și le confirmă.
-
Serializable — cel mai strict nivel de izolare. Tranzacțiile sunt executate ca și cum ar fi secvențiale, una după alta, prevenind orice anomalie, inclusiv citiri fantomă.
Exemplu de configurare a nivelului de izolare în Go folosind database/sql:
db.Exec("SET TRANSACTION ISOLATION LEVEL REPEATABLE READ")
// sau la începutul unei tranzacții
tx, err := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelRepeatableRead})
Fiecare nivel de izolare echilibrează între performanță și consistența datelor.