Nivoi izolacije transakcija u PostgreSQL-u
sobes.tech АИ
Одговор од АИ
PostgreSQL podržava četiri standardne razine izolacije transakcija, definirane u SQL standardu:
-
Read Uncommitted — najniža razina izolacije. U PostgreSQL-u se ponaša praktično kao Read Committed, jer ne dopušta prljava čitanja.
-
Read Committed (zadano) — transakcija vidi samo podatke koji su potvrđeni u trenutku početka svake pojedinačne upita. Mogući su neponovljivi čitanja i fantomska čitanja.
-
Repeatable Read — transakcija vidi podatke onako kako su bili na početku transakcije. Garantira ponovljivo čitanje, ali mogući su fantomski podaci.
-
Serializable — najviša razina izolacije, osigurava potpunu serializaciju transakcija, sprječava fantomska čitanja i osigurava konzistentnost podataka kao da su transakcije izvršene sekvencijalno.
Primjer postavljanja razine izolacije u Go koristeći database/sql i pq driver:
import (
"database/sql"
_ "github.com/lib/pq"
)
func setIsolationLevel(db *sql.DB) error {
tx, err := db.Begin()
if err != nil {
return err
}
defer tx.Rollback()
// Postavljanje razine izolacije
_, err = tx.Exec("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE")
if err != nil {
return err
}
// Daljnje operacije u transakciji
return tx.Commit()
}