我的应用程序中有一个非常简单的连接池。交回连接时,我需要确保没有设置任何变量并且没有事务仍在进行中。我明白这ROLLBACK; DISCARD ALL;
应该足够了。
在大多数情况下,如果交易成功,它会在将其移交给池化器之前提交,此时,我会收到诸如 之类的警告WARNING: there is no transaction in progress
。
ROLLBACK
只有当我们还在交易中时,有什么办法可以执行吗?或者是否有其他首选方法来清理连接?
我的应用程序中有一个非常简单的连接池。交回连接时,我需要确保没有设置任何变量并且没有事务仍在进行中。我明白这ROLLBACK; DISCARD ALL;
应该足够了。
在大多数情况下,如果交易成功,它会在将其移交给池化器之前提交,此时,我会收到诸如 之类的警告WARNING: there is no transaction in progress
。
ROLLBACK
只有当我们还在交易中时,有什么办法可以执行吗?或者是否有其他首选方法来清理连接?
假设使用 libpq,您可以调用PQtransactionStatus来查明是否有打开的事务。
如果你只有 SQL,那么你可以调用
该往返将增加清理过程的延迟,但只要没有进程阻塞等待释放的连接,这就不会成为问题。