Sobes.tech
Senior

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:

  1. 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.

  2. 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.

  3. 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ă.

  4. 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.