16.3. Пример

Следующая схема иллюстрирует пример, когда в транзакции выполняется подтранзакция. Непрерывная линия обозначает активную транзакцию, а пунктирная — транзакцию, которая была приостановлена и помещена в стек AST. Течение времени направлено вниз.

BEGIN; -- начать обычную транзакцию T0
|
INSERT INTO t VALUES (1);
:\
: BEGIN AUTONOMOUS SUBTRANSACTION; -- начать AST-транзакцию T1 (T0 помещается в стек)
: |
: INSERT INTO t VALUES (2);
: |
: COMMIT AUTONOMOUS TRANSACTION / ROLLBACK AUTONOMOUS TRANSACTION; -- завершить транзакцию T1
:                                                                  -- (T0 извлекается из стека)
:/
COMMIT / ROLLBACK; -- завершить транзакцию T0

В зависимости от выбора между COMMIT и ROLLBACK в двух местах, мы можем получить 4 разных результата из:

SELECT sum(x) from t;