如何获取有关已锁定行的 PostgreSQL 事务的更多详细信息

问题描述 投票:0回答:1

我的 Java+PostgreSQL 应用程序有时会出现无法锁定行的错误。在这些情况下,我想记录有关其他事务的一些信息,该事务使行保持锁定。

如何在 Java 程序中获取有关此其他事务的更多信息?我能否以某种方式为我在应用程序中创建的事务命名,并让 Postgres 报告其他事务的名称,以防锁定失败?

postgresql jdbc
1个回答
0
投票

除非该行被多个事务锁定(这种情况很少见),否则您可以在表

id = 1
中找到锁定带有
locks
的行的事务,如下所示:

SELECT xmax FROM locks WHERE id = 1;

 xmax 
══════
  761
(1 row)

找到属于该事务的会话如下:

SELECT pid FROM pg_locks
WHERE transactionid = 761 AND mode = 'ExclusiveLock';

 pid  
══════
 5460
(1 row)

您可以使用

终止锁定会话
SELECT pg_terminate_backend(5460);
© www.soinside.com 2019 - 2024. All rights reserved.