pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
不能通过 SPI_execute 这类 SPI 函数运行 COMMIT、ROLLBACK 之类的事务控制命令。不过,也有单独的接口函数允许通过 SPI 进行事务控制。
如果不考虑调用上下文,那么在任意用户定义的、可从 SQL 调用的函数中开始和结束事务,通常既不安全也不合理。例如,如果某个函数处在某条 SQL 命令的复杂 SQL 表达式中间,那么在该函数内部设置事务边界,很可能会导致隐蔽的内部错误甚至崩溃。这里介绍的接口函数,主要是供过程语言实现使用,以支持由 CALL 命令调用的 SQL 层过程进行事务管理,并且会把 CALL 调用的上下文考虑在内。用 C 实现、使用 SPI 的过程也可以实现同样的逻辑,但具体细节超出了本文档的范围。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。