47.4. Управление транзакциями #
- SPI_commit — зафиксировать текущую транзакцию
- SPI_rollback — прервать текущую транзакцию
- SPI_start_transaction — устаревшая функция
- SPI_rollback — прервать текущую транзакцию
Выполнять команды управления транзакциями (в частности, COMMIT
и ROLLBACK
) через функции SPI, такие как SPI_execute
, нельзя. Однако имеются отдельные интерфейсные функции, которые предназначены для управления транзакциями через SPI.
Вообще говоря, не всегда безопасно и разумно начинать и заканчивать транзакции в произвольных определяемых пользователями функциях, вызываемых из SQL, не принимая во внимание контекст их вызова. Например, завершение транзакции в середине функции, вызванной в сложном SQL-выражении внутри некоторой SQL-команды, скорее всего приведёт к странным внутренним ошибкам или сбоям. Представленные здесь интерфейсные функции прежде всего предназначены для использования реализациями процедурных языков с целью управления транзакциями в процедурах уровня SQL, вызываемых командой CALL
(при этом учитывается её контекст). Та же логика может быть реализована в процедурах на C, использующих SPI, но подробное освещение этой темы выходит за рамки данной документации.