Eu sou o autor de pg-promise;) E esta não é a primeira vez que esta pergunta é feita, então estou dando uma explicação detalhada aqui.
Quando você instancia um novo objeto de banco de dados como este:
const db = pgp(connection);
...tudo o que faz - cria o objeto, mas não tenta se conectar. A biblioteca é construída sobre o pool de conexões e somente os métodos de consulta reais solicitam uma conexão do pool.
Da documentação oficial:
Objetodb
representa o protocolo de banco de dados, com conexão de banco de dados lenta, ou seja, apenas os métodos de consulta reais adquirem e liberam a conexão. Portanto, você deve criar apenas umdb
global/compartilhado objeto por detalhes de conexão.
No entanto, você pode forçar uma conexão, chamando o método connect, conforme mostrado mais adiante. E embora esse método não seja uma maneira recomendada para encadear consultas (as tarefas devem ser usadas para isso), é útil verificar a conexão em geral.
Copiei o exemplo do meu próprio post:https://github.com/vitaly-t/pg-promise/issues/81
Abaixo está um exemplo de como fazer isso de duas maneiras ao mesmo tempo, para que você possa escolher a abordagem que preferir.
const initOptions = {
// global event notification;
error(error, e) {
if (e.cn) {
// A connection-related error;
//
// Connections are reported back with the password hashed,
// for safe errors logging, without exposing passwords.
console.log('CN:', e.cn);
console.log('EVENT:', error.message || error);
}
}
};
const pgp = require('pg-promise')(initOptions);
// using an invalid connection string:
const db = pgp('postgresql://userName:[email protected]:port/database');
db.connect()
.then(obj => {
// Can check the server version here (pg-promise v10.1.0+):
const serverVersion = obj.client.serverVersion;
obj.done(); // success, release the connection;
})
.catch(error => {
console.log('ERROR:', error.message || error);
});
Saídas:
CN: postgresql://userName:########@host:port/database EVENT: getaddrinfo ENOTFOUND host host:5432 ERROR: getaddrinfo ENOTFOUND host host:5432
Cada erro na biblioteca é relatado primeiro por meio do manipulador de eventos de erro global e somente então o erro é relatado no
.catch
correspondente manipulador. Atualizar
Abordagem moderna para testar a conexão + obter a versão do servidor em uma etapa:
// tests connection and returns Postgres server version,
// if successful; or else rejects with connection error:
async function testConnection() {
const c = await db.connect(); // try to connect
c.done(); // success, release connection
return c.client.serverVersion; // return server version
}
Links
- Método de conexão
- Erro de evento