Sobes.tech
Senior

Кои нива на изолация на транзакции PostgreSQL познавате?

sobes.tech AI

Отговор от AI

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

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

  2. Read Committed — стандартното ниво. Транзакцията вижда само данните, които са били потвърдени към момента на всяка отделна заявка. Могат да възникнат промени от други транзакции между заявките в рамките на същата транзакция.

  3. Repeatable Read — транзакцията вижда моментна снимка на данните в началото си. Всички заявки в рамките на транзакцията виждат едни и същи данни, дори ако други транзакции ги променят и потвърждават. Предотвратява неповторяемо четене (non-repeatable read), но позволява фантомни четения.

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

Пример за настройка на нивото на изолация:

BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- SQL операции
COMMIT;