16.1. Обзор#
16.1. Обзор
Autonomous transactions
в PL/pgSQL
позволяют выполнение SQL-запросов внутри функции в рамках отдельной транзакции, управляемой autonomous session
. Это может быть полезно для реализации сложной бизнес-логики и надежной обработки ошибок.
Autonomous session
работает независимо и выполняется в отдельном процессе. Она обменивается данными с основной сессией через общую память, используя стандартный протокол frontend/backend. Эта архитектура обеспечивает изоляцию транзакций от основной сессии, гарантируя, что действия в рамках автономной транзакции не вмешиваются в основную транзакцию.
Autonomous transactions
предлагают гибкость для реализации сложной логики и сценариев обработки ошибок, которые могут быть недостижимы в обычной функции PL/pgSQL
. Однако, при использовании autonomous transactions
необходимо быть осторожным, чтобы избежать возможных издержек и проблем с параллелизмом.
Автономная транзакция работает независимо и инициируется вызывающей программой. Любая команда commit или rollback внутри автономной транзакции не влияет на состояние commit или rollback любой транзакции в вызывающей программе. Аналогично, любое действие commit или rollback в вызывающей программе не влияет на состояние commit или rollback SQL-команд внутри автономной транзакции.
Следующие виды процедур PL/pgSQL
могут включать autonomous transactions
:
Независимые процедуры и функции
Анонимные блоки
Функции триггеров
Ключевые аспекты и ограничения, связанные с autonomous transactions
, включают:
Каждая автономная транзакция занимает слот подключения на протяжении всего своего выполнения. В определенных сценариях это может потребовать изменения параметра max_connections в файле конфигурации postgresql.conf.
В большинстве аспектов автономная транзакция действует так, будто это полностью отдельная сессия. Однако важно понимать, что параметры конфигурации (установленные с помощью команды
SET
) являются исключением из этого правила.Autonomous transactions
принимают существующие настройки параметров и могут передавать настройки, которые они фиксируют, в охватывающую транзакцию.Autonomous transactions
могут быть вложенными.Выполнение запросов параллельно не допускается внутри
autonomous transactions
.