今天,我发现其中一个SQL查询挂在PostgreSQL中,并且从未发布过。 “取消查询”命令将无济于事,查询仅挂在此处并显示“ 事务中空闲 ”状态。 它让我别无选择,只能去Debian终端发出“ kill”命令来手动终止它。
在PostgreSQL中查询挂起或不响应是因为我们在Web应用程序中未正确处理事务管理器。 当系统意外关闭时,正在运行的查询将挂在PostgreSQL中,并且事务管理器(例如DataSourceTransactionManager
)无法回滚正在进行的事务。
注意
将事务管理器更改为JtaTransactionManager
,即使系统意外关闭,我的Web应用程序也可以终止正在进行的事务。
但是在这里,我向您展示了如何终止挂起的SQL查询。 在PostgreSQL中,所有挂起的查询将显示为“ 事务中空闲 ”。 首先,您必须列出所有现有的PostgreSQL进程,然后发出kill kill命令来手动终止挂起的查询。
1.列出所有流程
发出“ ps -ef | grep postgres
ps -ef | grep postgres
”命令列出所有属于postgres用户的现有进程。
mkyong:~# ps -ef | grep postgres
postgres 13648 1 0 11:04 ? 00:00:00 /var/lib/postgresql/PostgresPlus8.3xxxxxxx
postgres 13651 13648 0 11:04 ? 00:00:00 postgres: logger process