我的 Java+PostgreSQL 应用程序有时会出现无法锁定行的错误。在这些情况下,我想记录有关其他事务的一些信息,该事务使行保持锁定。
如何在 Java 程序中获取有关此其他事务的更多信息?我能否以某种方式为我在应用程序中创建的事务命名,并让 Postgres 报告其他事务的名称,以防锁定失败?
除非该行被多个事务锁定(这种情况很少见),否则您可以在表
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);