запрос базы данных postgres с помощью node-postgres

Нужно ли мне использовать pg.connect() каждый раз, когда я запрашиваю базу данных? После просмотра страницы github и вики примеры показывают запрос внутри обратного вызова pg.connect, подобный этому (комментарии взяты из примера github, я их не писал)

//this initializes a connection pool
//it will keep idle connections open for a (configurable) 30 seconds
//and set a limit of 20 (also configurable)
pg.connect(conString, function(err, client, done) {
  if(err) {
    return console.error('error fetching client from pool', err);
  }
  client.query('SELECT $1::int AS number', ['1'], function(err, result) {
    //call `done()` to release the client back to the pool
    done();

    if(err) {
      return console.error('error running query', err);
    }
    console.log(result.rows[0].number);
    //output: 1
  });
});

Комментарии сбивают с толку, потому что похоже, что pg.connect() создает новый пул клиентов с каждым вызовом, что, очевидно, было бы неэффективным. Я видел в документации другие примеры создания клиента, но я хочу использовать пул клиентов.


person user137717    schedule 12.12.2015    source источник
comment
Если вы хотите избежать сложности подключения, используйте pg-promise   -  person vitaly-t    schedule 13.12.2015


Ответы (1)


Да, pg.connect - это рекомендуемый способ ведения дел. как указано на странице github: https://github.com/brianc/node-postgres. Он не создает пул для каждого запроса, а новый запрос создает «пул», и все последующие запросы добавляются к этому соединению до истечения времени ожидания 30 секунд. //оно будет держать незанятые соединения открытыми в течение (настраиваемых) 30 секунд Таким образом, когда приложение не используется, соединение отсутствует, но как только вы получаете несколько запросов каждую секунду, все они поставлен в очередь на это соединение. время ожидания и сумма в очереди могут быть изменены.

person Saad    schedule 12.12.2015
comment
Не могли бы вы уточнить, что это не создание пула для каждого запроса, а новый запрос создаст «пул», и все последующие запросы будут добавлены к этому соединению? Скажем, у меня есть два http-маршрута с вызовами db. Один пользователь переходит на маршрут A, pg.connect() создает пул клиентов и выполняет запрос. Теперь другой пользователь переходит на маршрут B (в течение 30 секунд). Использует ли pg.connect() на маршруте B существующий клиент из пула, созданного на маршруте A, или он создает свой собственный пул? Я предполагаю, что pg.connect() повторно использует соединения из существующего пула и создает пул только при необходимости, но я должен спросить. - person user137717; 12.12.2015
comment
да, маршрут B использует существующее соединение, pg-node не волнует, как вы маршрутизируете или какую таблицу, пока вы обращаетесь к одной и той же базе данных. - person Saad; 12.12.2015