Sobes.tech
Senior

Tranzakciók izolációs szintjei a PostgreSQL-ben

sobes.tech MI

Válasz az MI-től

PostgreSQL támogatja az SQL szabványban meghatározott négy standard tranzakció elszigeteltségi szintet:

  1. Read Uncommitted — a legalacsonyabb elszigeteltségi szint. A PostgreSQL-ben valójában úgy viselkedik, mint a Read Committed, mivel nem engedélyezi a piszkos olvasásokat.

  2. Read Committed (alapértelmezett) — a tranzakció csak azokat az adatokat látja, amelyek megerősítésre kerültek minden egyes egyedi lekérdezés kezdetekor. Nem ismételhető olvasások és fantom olvasások fordulhatnak elő.

  3. Repeatable Read — a tranzakció úgy látja az adatokat, mint ahogy azok a tranzakció kezdetekor voltak. Garantálja az ismételhető olvasásokat, de fantom olvasások lehetnek.

  4. Serializable — a legmagasabb elszigeteltségi szint, teljes tranzakciós szekvenciázást biztosít, megakadályozza a fantom olvasásokat és biztosítja az adatok konzisztenciáját, mintha a tranzakciók egymás után futnának.

Példa az elszigeteltségi szint beállítására Go-ban a database/sql és a pq driver használatával:

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()

    // Elszigeteltségi szint beállítása
    _, err = tx.Exec("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE")
    if err != nil {
        return err
    }

    // További műveletek a tranzakcióban

    return tx.Commit()
}