Sobes.tech
Senior

Níveis de isolamento de transações no PostgreSQL

sobes.tech IA

Resposta da IA

O PostgreSQL suporta quatro níveis padrão de isolamento de transações, definidos no padrão SQL:

  1. Read Uncommitted — o nível de isolamento mais baixo. No PostgreSQL, na prática, comporta-se como Read Committed, pois não permite leituras sujas.

  2. Read Committed (padrão) — a transação vê apenas os dados que foram confirmados no momento do início de cada consulta individual. Podem ocorrer leituras não repetíveis e leituras fantasmas.

  3. Repeatable Read — a transação vê os dados como estavam no momento do início da transação. Garante leituras repetíveis, mas podem ocorrer leituras fantasmas.

  4. Serializable — o nível mais alto de isolamento, garante a serialização completa das transações, evita leituras fantasmas e assegura a consistência dos dados como se as transações fossem executadas sequencialmente.

Exemplo de configuração do nível de isolamento em Go usando database/sql e o driver 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()

    // Configurar o nível de isolamento
    _, err = tx.Exec("SET TRANSACTION ISOLATION LEVEL SERIALIZABLE")
    if err != nil {
        return err
    }

    // Operações adicionais na transação

    return tx.Commit()
}