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