Sobes.tech
Senior

Transactie-isolatie niveaus in PostgreSQL

sobes.tech AI

Antwoord van AI

PostgreSQL ondersteunt vier standaard isolatieniveaus, gedefinieerd in de SQL-standaard:

  1. Read Uncommitted — het laagste isolatieniveau. In PostgreSQL gedraagt het zich in feite als Read Committed, omdat vuile lezingen niet worden toegestaan.

  2. Read Committed (standaard) — de transactie ziet alleen de gegevens die op het moment van aanvang van elke afzonderlijke query zijn bevestigd. Niet-herhaalbare lezingen en fantasielezingen kunnen voorkomen.

  3. Repeatable Read — de transactie ziet de gegevens zoals ze waren op het moment van de start van de transactie. Garandeert herhaalbare lezingen, maar fantasielezingen kunnen voorkomen.

  4. Serializable — het hoogste isolatieniveau, garandeert volledige serialisatie van transacties, voorkomt fantasielezingen en zorgt voor gegevensconsistentie alsof de transacties sequentieel worden uitgevoerd.

Voorbeeld van het instellen van het isolatieniveau in Go met behulp van database/sql en de 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()

    // Stel het isolatieniveau in
    _, err = tx.Exec("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE")
    if err != nil {
        return err
    }

    // Verdere operaties in de transactie

    return tx.Commit()
}