Sobes.tech
Senior

Нива на изолация на транзакциите в PostgreSQL

sobes.tech AI

Отговор от AI

PostgreSQL поддържа четири стандартни нива на изолация на транзакциите, дефинирани в SQL стандарта:

  1. Read Uncommitted — най-ниското ниво на изолация. В PostgreSQL се държи практически като Read Committed, тъй като не позволява мръсни четения.

  2. Read Committed (по подразбиране) — транзакцията вижда само данните, които са били потвърдени към момента на началото на всяка отделна заявка. Възможни са неповторяеми четения и фантомни четения.

  3. Repeatable Read — транзакцията вижда данните такива, каквито са били към началото на транзакцията. Гарантира повторяемо четене, но възможни са фантомни четения.

  4. Serializable — най-високото ниво на изолация, осигурява пълна сериализация на транзакциите, предотвратява фантомни четения и осигурява консистентност на данните, сякаш транзакциите се изпълняват последователно.

Пример за настройка на нивото на изолация в Go с използване на database/sql и драйвера pq:

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

    // Настройка на нивото на изолация
    _, err = tx.Exec("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE")
    if err != nil {
        return err
    }

    // Допълнителни операции в транзакцията

    return tx.Commit()
}