我有一个会议(SQLAlchemy的)上的PostgreSQL,与活性未提交的事务。我刚刚通过了会议,可能会或可能不会发出SQL INSERT / UPDATE / DELETE一些语句调用树,通过sqlalchemy.orm或者直接通过下面的连接。

有一种方法,以检查是否有在该事务中的任何未决数据改性语句?即是否提交将是一个空操作与否,以及是否将回滚丢弃的东西或不?

我见过的人指出v$transaction在甲骨文同样的事情(见的该SO质疑)。我在寻找类似的PostgreSQL上使用的东西。

有帮助吗?

解决方案

通过检查进入系统视图pg_locks对启动。

http://www.postgresql.org/docs/ 8.4 /互动/视图-PG-locks.html

其他提示

考虑语句的顺序如下:

select txid_current();

begin;

select txid_current();

如果由两个选择返回的事务ID相等,则有一个打开的事务。如果没有,那么有没有,(但现在)。

如果数字是不同的,那么你就只能打开一个事务,您将很可能要关闭。副作用

更新:事实上,正如@ r2evans指出(!感谢您的洞察力),你不需要在“开始” - txid_current()将只如果返回相同数量在一个事务中。

没有,不是从数据库级别,真的。也许你可以添加一些在SQLAlchemy的水平跟踪跟踪它?

另外,你如何定义一个空操作?如果你更新一个值来之前有同样的价值,是一个无操作或没有?从数据库的角度来看,如果它有一个,它不会是一个空操作。但是,从应用程序的角度来看,它可能会

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top