Нива на изолация на транзакциите в PostgreSQL
sobes.tech AI
Отговор от AI
PostgreSQL поддържа четири стандартни нива на изолация на транзакциите, дефинирани в SQL стандарта:
-
Read Uncommitted — най-ниското ниво на изолация. В PostgreSQL се държи практически като Read Committed, тъй като не позволява мръсни четения.
-
Read Committed (по подразбиране) — транзакцията вижда само данните, които са били потвърдени към момента на началото на всяка отделна заявка. Възможни са неповторяеми четения и фантомни четения.
-
Repeatable Read — транзакцията вижда данните такива, каквито са били към началото на транзакцията. Гарантира повторяемо четене, но възможни са фантомни четения.
-
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()
}