2017-11-18 8 views
0

私は現在、アイテムデータベースを持つチャットゲームを持っています。場合によっては、データベースに接続しているクライアントが完全にロックされ、その時点以降に実行されたすべてのクエリは永久にハングします。この問題は、アプリケーションを再起動することで解決されます。PostgreSQLデータベースは何の理由でもロックされませんか?

pg npmパッケージを使用してnode.jsアプリでチャットボットを実行しています。私は接続プールを使用しています。接続プールは起動時に一度だけ接続し、アプリケーションの存続期間中は接続されたままです。

私の質問のほとんどは比較的簡単で、ここではユーザーの在庫を修正クエリは次のとおりです。pgAdminでチェックイン時に

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; 

私はロックされて接続されたクライアントがマークされていることがわかります。私はこの問題をデバッグする方法やそれを修正するために何をすべきかはわかりません。

答えて

0

ビューpg_locksを参照して、プロセスをロックしているユーザーを確認してください。

PostgreSQL 9.6以降、特定のバックエンドをブロックしているバックエンドをどのバックエンドが保持しているかを示す関数pg_blocking_pidsもあります。

関連する問題