我目前有一个聊天游戏,其中包含一个项目数据库。有时,连接到数据库的客户端将完全锁定,并且在该点之后完成的所有查询将永远挂起。通过重新启动应用程序可以解决此问题。
我使用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时,我看到已连接的客户端被标记为已锁定。我不知道如何调试此问题或如何解决此问题。
答案 0 :(得分:0)
查看视图pg_locks
,了解谁会锁定您的流程。
自PostgreSQL 9.6以来,还有一个函数pg_blocking_pids
可以告诉你哪些后端持有阻塞某个后端的锁。