如何检查挂起操作在PostgreSQL的交易
-
22-07-2019 - |
题
我有一个会议(SQLAlchemy的)上的PostgreSQL,与活性未提交的事务。我刚刚通过了会议,可能会或可能不会发出SQL INSERT
/ UPDATE
/ DELETE
一些语句调用树,通过sqlalchemy.orm
或者直接通过下面的连接。
有一种方法,以检查是否有在该事务中的任何未决数据改性语句?即是否提交将是一个空操作与否,以及是否将回滚丢弃的东西或不?
我见过的人指出v$transaction
在甲骨文同样的事情(见的该SO质疑)。我在寻找类似的PostgreSQL上使用的东西。
解决方案
通过检查进入系统视图pg_locks对启动。
其他提示
考虑语句的顺序如下:
select txid_current();
begin;
select txid_current();
如果由两个选择返回的事务ID相等,则有一个打开的事务。如果没有,那么有没有,(但现在)。
如果数字是不同的,那么你就只能打开一个事务,您将很可能要关闭。副作用
更新:事实上,正如@ r2evans指出(!感谢您的洞察力),你不需要在“开始” - txid_current()将只如果返回相同数量在一个事务中。
没有,不是从数据库级别,真的。也许你可以添加一些在SQLAlchemy的水平跟踪跟踪它?
另外,你如何定义一个空操作?如果你更新一个值来之前有同样的价值,是一个无操作或没有?从数据库的角度来看,如果它有一个,它不会是一个空操作。但是,从应用程序的角度来看,它可能会
不隶属于 StackOverflow