2017-06-15 19 views
1

5.1から6.2.4に更新した後、私は私たちの本番サーバーをクラッシュし、次のエラー(ほぼ一日一回)時々参照:node-postgresとの予期しない切断/自動再接続を正しく処理する方法は?

Error: Connection terminated unexpectedly 
2017-06-15T10:03:33.683+02:00 at Object.onceWrapper (events.js:293:19) 
2017-06-15T10:03:33.683+02:00Connection terminated unexpectedly 
2017-06-15T10:03:33.684+02:00 at Socket.<anonymous> (/home/bas/app_21386476-a451-424c-ad67-870442bbdbe7/node_modules/pg/lib/connection.js:138:10) 
2017-06-15T10:03:33.684+02:00 at emitNone (events.js:86:13) 
2017-06-15T10:03:33.684+02:00 at emitNone (events.js:91:20) 
2017-06-15T10:03:33.684+02:00 at Connection.emit (events.js:188:7) 
2017-06-15T10:03:33.684+02:00 at Socket.emit (events.js:188:7) 
2017-06-15T10:03:33.685+02:00 at process._tickCallback (internal/process/next_tick.js:104:9) 
2017-06-15T10:03:33.685+02:00undefined 
2017-06-15T10:03:33.685+02:00 at _combinedTickCallback (internal/process/next_tick.js:80:11) 
2017-06-15T10:03:33.685+02:00 at endReadableNT (_stream_readable.js:975:12) 

私はhttps://github.com/brianc/node-postgres/pull/1316

AFAI、エラーを見てきましたこのパッチの前に発行されていませんでした。現在、プールにエラーが発生しています。

私は、このエラーが発生したときに何をすべきかについて少し混乱していますか? プール全体を再接続する必要があることを意味しますか?しかしどうですか? それは、エラーを出すクライアントが確実に死んでいることを意味します。そのため、クライアントが開始した操作を削除し、クエリが破棄されたことをユーザーに伝えます。しかし、もう一度、client.queryコールバックがこのエラーで呼び出されていないように見えます(恐らく何とかhttps://github.com/brianc/node-postgres/issues/1322に関連しています)?

+0

私の答えはあなたの尋ねたことをあなたに与えてくれませんか?また、接続の問題に対処する必要がないようにするには、[pg-promise](https://github.com/vitaly-t/pg-promise)を参照してください。 –

答えて

0

このエラーが発生したときにどうすればよいですか?プール全体を再接続する必要があるのでしょうか?

それは単にPoolオブジェクト上.on('error', cb)ハンドラを持つことは、自動的にあなたの側から何かを必要とせずに、対応するClientオブジェクトを再作成するのに十分でなければならないことを意味しています。

100%信頼できるバージョンのドライバが必要な場合は、その時点でバージョン5.1を使用することをお勧めします。新しいバージョンではいくつかのマイナーなアップデートがありましたが、接続処理は新しい接続プールで少し横向きに行われました。

最新の修正では、既知の接続性の問題が解消されたことを期待していますが、時間と適切なテストではまだ検証されていません。

some other thoughts I wrote about it previouslyも参照してください。いくつかのポイントはまだ有効です。

関連する問題