Sobes.tech
Senior

Nivoi izolacije transakcija u PostgreSQL-u

sobes.tech АИ

Одговор од АИ

PostgreSQL podržava četiri standardne razine izolacije transakcija, definirane u SQL standardu:

  1. Read Uncommitted — najniža razina izolacije. U PostgreSQL-u se ponaša praktično kao Read Committed, jer ne dopušta prljava čitanja.

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

  3. Repeatable Read — transakcija vidi podatke onako kako su bili na početku transakcije. Garantira ponovljivo čitanje, ali mogući su fantomski podaci.

  4. 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()
}