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