PostgreSQL nie obsługuje pod-transakcji, ale SAVEPOINT
funkcja może skutecznie odpowiedzieć na Twoje potrzeby. Cytując z dokumentacją Advanced Access warstwy do PG poprzez obietnic przez Witalija Tomilov na GitHub:
PostgreSQL nie ma odpowiedniej obsługi zagnieżdżonych transakcji, obsługuje tylko częściowe wycofywanie poprzez punkty zapisu w transakcjach. Różnica między tymi dwiema technikami jest ogromna, jak wyjaśniono dalej.
Właściwe wsparcie dla transakcji zagnieżdżonych oznacza, że wynik udanej pod-transakcji nie jest wycofywany, gdy wycofywana jest jego transakcja nadrzędna. Jednak w przypadku punktów zapisu PostgreSQL wycofanie transakcji najwyższego poziomu powoduje również wycofanie wyniku wszystkich wewnętrznych punktów zapisu.
Punkty zapisu można wykorzystać do częściowego wycofania do wcześniejszego punktu w aktywnej transakcji. Na przykład, aby ustanowić punkt zapisu, a później cofnąć efekty wszystkich poleceń wykonanych po jego ustanowieniu:
BEGIN;
INSERT INTO table1 VALUES (1);
SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (2);
ROLLBACK TO SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (3);
COMMIT;
Powyższa transakcja spowoduje wstawienie wartości 1 i 3, ale nie 2. Zobacz SAVEPOINT
dokumentację, aby uzyskać więcej informacji.