在执行另外一个可能也使用了 SPI 的过程之前,我们应该调用 SPI_push。 在 SPI_push 之后,SPI 不再是"已连接"状态, 除非再次进行 SPI_connect,否则 SPI 函数调用将被拒绝。 这样就保证了你的过程的 SPI 状态和另外一个你调用的过程的状态之间的干净的隔离。 在另外一个过程返回后,调用 SPI_pop 恢复对你自己的 SPI 状态的访问。
请注意 SPI_execute 和相关的函数在把控制交回 SQL 执行引擎之前自动做与 SPI_push 相当的工作,因此你在使用这些函数的时候不用担心这些。 只有在你直接调用任意可能包含 SPI_connect 调用的代码的时候, 你才需要发出 SPI_push 和 SPI_pop。