Кои нива на изолация на транзакции PostgreSQL познавате?
sobes.tech AI
Отговор от AI
В PostgreSQL има четири нива на изолация на транзакции, определени от стандарт SQL:
-
Read Uncommitted — най-ниското ниво на изолация. Позволява четене на данни, които все още не са потвърдени (dirty reads). В PostgreSQL, по същество, се държи като Read Committed, тъй като dirty reads не се поддържат.
-
Read Committed — стандартното ниво. Транзакцията вижда само данните, които са били потвърдени към момента на всяка отделна заявка. Могат да възникнат промени от други транзакции между заявките в рамките на същата транзакция.
-
Repeatable Read — транзакцията вижда моментна снимка на данните в началото си. Всички заявки в рамките на транзакцията виждат едни и същи данни, дори ако други транзакции ги променят и потвърждават. Предотвратява неповторяемо четене (non-repeatable read), но позволява фантомни четения.
-
Serializable — най-строгото ниво на изолация. Гарантира пълна сериализация на транзакциите, предотвратява фантомни четения и осигурява поведение, еквивалентно на последователното изпълнение.
Пример за настройка на нивото на изолация:
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- SQL операции
COMMIT;