【问题标题】:Postgres - killing uncommitted transactionPostgres - 杀死未提交的事务
【发布时间】: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


【解决方案1】:

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

如果进程在轰炸自己,那么在 pg_stat_activity 中看不到任何东西也就不足为奇了。

【讨论】:

  • 我想这就是我想说的,但措辞不正确。该事务是持久的,因此它仍在考虑之前添加的项目。我只想能够终止所有交易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2015-05-29
  • 2020-03-19
相关资源
最近更新 更多