【发布时间】:2020-04-09 09:39:59
【问题描述】:
我已经阅读了一些执行此操作的方法(即查询 pg_stat_activity 表以获取要杀死的 pid),但这些查询中没有返回数据。 在 MSSQL 等其他 DBMS 中,我至少可以看到未提交的数据和/或使用分析器查看哪些连接处于活动状态。使用 postgres,我只知道是这种情况,因为我正在运行一个 java 应用程序,该应用程序偶尔会意外关闭,这会阻止应用程序提交或回滚其更改。当我尝试运行该应用程序时,我看到未提交但仍以某种方式处于活动状态的重复键数据的错误。我已经停止了我的 postgres 实例,但是再次打开它后仍然遇到了问题。还有其他方法可以查看与我的数据库服务器有挂起连接的任何内容并将其终止吗?
【问题讨论】:
-
您可以通过查看
pg_stat_activity中的idle in transaction会话来检查具有未提交更改的连接 -
我提到我已经尝试过了。该查询中没有返回此类数据。所有“状态”列都是 NULL。
-
那么您没有未结交易,您的问题出在其他地方。您使用的查询到底是什么?
-
从 pg_stat_activity 中选择 * 并在状态列上进行过滤。当我在没有状态的情况下运行此查询时,我可以看到一些但它们都是 NULL 而不是空闲。
-
state列永远不会为空,除了后台进程
标签: java postgresql transactions read-uncommitted