PostgreSQL数据库无缘无故锁定?

时间:2017-11-18 18:49:47

标签: postgresql

我目前有一个聊天游戏,其中包含一个项目数据库。有时,连接到数据库的客户端将完全锁定,并且在该点之后完成的所有查询将永远挂起。通过重新启动应用程序可以解决此问题。

我使用node.js npm包在pg应用中运行聊天机器人。我正在使用一个连接池,我在启动时连接到一个连接池,并在应用程序的生命周期内保持连接状态。

我的大多数查询都相对简单,以下是修改用户广告资源的查询:

INSERT INTO items(user_id, item_id, quantity) VALUES($1, $2, $3) 
    ON CONFLICT ON CONSTRAINT item_pk 
        DO UPDATE SET quantity = items.quantity + $3 
            RETURNING quantity;

签入pgAdmin时,我看到已连接的客户端被标记为已锁定。我不知道如何调试此问题或如何解决此问题。

1 个答案:

答案 0 :(得分:0)

查看视图pg_locks,了解谁会锁定您的流程。

自PostgreSQL 9.6以来,还有一个函数pg_blocking_pids可以告诉你哪些后端持有阻塞某个后端的锁。