пул.подключение не отвечает после того, как некоторые узлы postgres

#node.js #postgresql #pg

Вопрос:

Я объединяю postgres каждые 10 секунд для извлечения данных из таблицы, но через некоторое время она не подключается.

планировщик-это узел-cron:

 cron.schedule('*/10 * * * * *', () =gt;{  sync.doSync(); },{scheduled: true})  

моя функция doSync:

 function doSync(){  console.log("presync")   db.pool.connect(async(err, connection) =gt; {  console.log("connected")  if(err){  console.log("error:",err)  }   const stored = parseInt(await getStored("mystorage.txt"));  const fetched = parseInt(await fetchLatest(connection));   const query = getQuery(fetched)  try {  const cursor = await connection.query(new Cursor(query));  await processResult(cursor,fetched);  connection.release();  } catch (err) {  setTimeout(doSync, 10000)  }  }  }) }  

в db.js

 module.exports.pool = new Pool(config.postgres)  

Это работает в течение 30 секунд, я получаю «предварительную синхронизацию» и «подключение» в течение 3 раз с консоли.войдите в систему, и после этого только «предварительная синхронизация». ?Как мне решить эту проблему? Мне нужно постоянно запрашивать данные из базы данных, и я также не понимаю, следует ли мне освобождать соединение раньше, чем я это сделал? Я новичок в бэкэнде и пытаюсь понять, как правильно все делать. Кто-нибудь может помочь?

Комментарии:

1. Я предполагаю, что ваш запрос не выполняется, и catch {} не освобождает соединение. Гораздо лучше переместить connection.release() в блок finally {} — таким образом, соединение будет отключено даже при наличии ошибок. Кроме того, при обработке ошибок только при повторных попытках может потребоваться некоторое ведение журнала (по крайней мере, console.error) для облегчения отладки.

2. запрос занимает около 3 секунд, чтобы вернуть результаты с помощью сканирования индекса. я переместил соединение. отпустите, однако, блок захвата. у меня действительно есть сообщение об ошибке, но оно не отображалось в коде здесь.