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, управляют автономной транзакцией.
Курсоры и подготовленные операторы в настоящее время не поддерживаются в автономных транзакциях.