PostgreSQL 事务管理
- SPI_commit — commit the current transaction
- SPI_rollback — abort the current transaction
- SPI_start_transaction — start a new transaction
不能通过SPI_execute
这样的SPI函数运行COMMIT
和ROLLBACK
之类的事务控制命令。不过,也有单独的接口函数允许通过SPI进行事务控制。
如果不考虑被调用的上下文,在任意的用户定义的可从SQL调用的函数中开始以及结束事务通常并不是安全和明智的。例如,一个事务位于一个函数内,而该函数是某个SQL命令中的一个复杂SQL表达式的一部分,这样的事务有可能会导致隐蔽的内部错误或者崩溃。这里介绍的接口函数的主要目的是被过程语言的实现用于支持在CALL
命令调用的SQL层过程中进行事务管理,同时把CALL
调用的上下文也加以考虑。用C实现的使用SPI的过程可以实现同样的逻辑,但是其细节超出了这份文档的范围。