PG (Node- Postgres) Pool зависает при подключении ... Но только внутри Gatsby? - PullRequest
1 голос
/ 02 августа 2020

ПРИМЕЧАНИЕ: В основном это вопрос о модуле pg или Node- PostgreSQL. В нем есть детали из Gatsby и Postgraphile, но мне не нужен опыт по всем трем, просто pg.

У меня есть база данных, которая отлично работает с сервером Express, использующим PostGraphile. Я также могу получить к нему доступ через node в командной строке ...

const { Pool } = require("pg");
const pool = new Pool({ connectionString: myDbUrl });
pool.connect().then(() => console.log('connected'));
// logs 'connected' immediately

Точно такая же база данных также ранее отлично работала с Gatsby / PostGraphile через подключаемый модуль gatsby-source-pg ... но недавно я сменил машины разработки, и когда я пытаюсь создать или запустить сервер разработки, Гэтсби зависает на шаге «источник и преобразование узлов». Когда я отлаживаю его, он зависает при вызове pool.connect().

Итак, у меня буквально есть две кодовые базы, использующие PostGraphile, обе с одной и той же конфигурацией, и одна работает, а другая нет. Еще более странно, если я отредактирую исходный код подключаемого модуля Gatsby в node_modules, чтобы он использовал точно такой же код (который я могу успешно запустить из командной строки) ... он все равно зависает.

Единственное, о чем я могу думать, это то, что какой-то другой плагин Gatsby использует все соединения и не освобождает их, но, насколько я могу судить (например, с помощью grep-ing через node_modules) ни один другой плагин не использует даже pg.

Так что на самом деле у меня есть два вопроса:

A) Может ли кто-нибудь помочь мне понять, почему connect зависает? Бонусные баллы, если вы можете помочь мне понять, почему это должно происходить с заведомо хорошей конфигурацией и только внутри Gatsby (после изменения некоторых факторов окружающей среды)?

B) Кто-нибудь может помочь мне исправить Это? Если это может быть проблема типа «предыдущий код забыл освободить соединения», могу ли я как-нибудь проверить это? Если бы я мог просто записать new Pool().areYouBroken() как-нибудь, это было бы невероятно полезно.

1 Ответ

0 голосов
/ 03 августа 2020

Раздражающий ответ: из-за ошибки (спасибо @charmander). Для получения дополнительной информации см .: https://github.com/brianc/node-postgres/issues/2300

PS Я так и не нашел никакой функции new Pool().areYouBroken().

...