16.1. Обзор#

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.