@SEOVirus

Как правильно работать в NodeJS с PostgreSQL?

Не понимаю как функционирует пул клиентов. У меня требуется нескольким приложениям одновременно использовать одну Postgre базу.
Читая статью: https://node-postgres.com/features/pooling наталкиваюсь на выражение:
You must __always__ return the client to the pool if you successfully check it out, regardless of whether or not there was an error with the queries you ran on the client. If you don't check in the client your application will leak them and eventually your pool will be empty forever and all future requests to check out a client from the pool will wait forever.

Вообще ничего не понял. Я же делаю запросы так:
const {Pool} = require("pg");
const pool = new Pool({
	host: "127.0.0.1",
	port: 5432,
	database: "mydb",
	user: "user1",
	password: "pwd",
});
(async () => {
	let query = "SELECT datnameasfd FROM pg_database;";
	let res = await pool.query(query);
})();

Это правильно или нет? Но здесь даже нет клиента. Не понимаю нужно ли это делать вообще и в каком случае нужно. Как изменится реализация, если у меня веб-сервер обрабатывает сотни запросов и нужно persistent-connection? В каком случае в конце нужно добавлять pool.end()?
  • Вопрос задан
  • 401 просмотр
Решения вопроса 1
Negezor
@Negezor
Senior Shaurma Developer
В пуле хранятся соединения, скажем 10 штук. Каждый раз когда мы вызываем pool.query(), мы запрашиваем соединение. Если соединение есть - производится запрос, а потом в пуле обновляется его статус на свободный. Если все соединения уже заняты - ждём пока освободится первый попавшийся. В документации же сказано, что вы должны возвращать соединения в pool (иначе когда подойдёт лимит соединений в пуле, запросы будут ожидаться бесконечно). А pool.end() нужно вызывать когда вам больше не понадобится текущий пулл запросов, например вы его временно создали для другой БД? Пулл сам создаст соединения по необходимости, конечно он не будет выходить за лимиты, иначе бы мы тратили все ресурсы на создание соединений.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы