首页 > 解决方案 > Postgres - 杀死未提交的事务

问题描述

我已经阅读了一些方法来做到这一点(即查询 pg_stat_activity 表以获取要杀死的 pid),但我没有在这些查询中返回数据。在 MSSQL 等其他 DBMS 中,我至少可以看到未提交的数据和/或使用分析器来查看哪些连接处于活动状态。使用 postgres,我只知道是这种情况,因为我正在运行一个 java 应用程序,它偶尔会意外关闭,这会阻止应用程序提交或回滚其更改。当我尝试运行该应用程序时,我看到未提交但仍以某种方式处于活动状态的重复键数据的错误。我已经停止了我的 postgres 实例,但是再次打开它后仍然遇到了问题。有没有另一种方法来查看与我的数据库服务器有挂起连接的任何东西并杀死它?

标签: javapostgresqltransactionsread-uncommitted

解决方案


从未提交值上的重复键中获取唯一约束错误的唯一方法是,如果两个 dup 都插入到同一个事务中。否则,第二个插入块的过程,直到第一个提交或回滚。

如果进程正在轰炸自己,那么在 pg_stat_activity 中没有什么可看的也就不足为奇了。


推荐阅读