16.2. Использование#
16.2. Использование
Для включения автономных транзакций для функции PL/pgSQL
, добавьте директиву:
PRAGMA AUTONOMOUS_TRANSACTION;
Это запустит autonomous session
при входе в блок функции и завершит ее при выходе. Любые SQL-команды внутри блока будут выполняться в autonomous session
.
Например:
CREATE FUNCTION process_orders() RETURNS void AS $$ DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN FOR order IN SELECT * FROM orders LOOP -- start transaction START TRANSACTION; -- insert order INSERT INTO processed_orders VALUES (...); -- check for errors IF (<error condition>) THEN ROLLBACK; CONTINUE; END IF; -- commit on success COMMIT; END LOOP; END; $$ LANGUAGE plpgsql;
Это позволит обрабатывать каждый заказ в отдельной транзакции, избегая отката ранее зафиксированных заказов в случае сбоя.
Autonomous session
имеет свое собственное подключение к базе данных и состояние транзакции. Обычные команды сессии, такие как START TRANSACTION
, COMMIT
и ROLLBACK
, управляют автономной транзакцией.
Курсоры и подготовленные операторы в настоящее время не поддерживаются в автономных транзакциях.