16.2. Использование#

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, управляют автономной транзакцией.

Курсоры и подготовленные операторы в настоящее время не поддерживаются в автономных транзакциях.