sql >> Base de Datos >  >> RDS >> PostgreSQL

Verifique la conexión de la base de datos con pg-promise al iniciar una aplicación

Soy el autor de pg-promise;) Y esta no es la primera vez que se hace esta pregunta, así que le doy una explicación detallada aquí.

Cuando crea una instancia de un nuevo objeto de base de datos como este:

const db = pgp(connection);

...todo lo que hace:crea el objeto, pero no intenta conectarse. La biblioteca está construida sobre el grupo de conexiones y solo los métodos de consulta reales solicitan una conexión del grupo.

De la documentación oficial:

Objeto db representa el protocolo de base de datos, con conexión de base de datos diferida, es decir, solo los métodos de consulta reales adquieren y liberan la conexión. Por lo tanto, debe crear solo un db global/compartido objeto por detalles de conexión.

Sin embargo, puede forzar una conexión llamando al método connect, como se muestra más adelante. Y aunque este método no es una forma recomendada de encadenar consultas (se deben usar las tareas para eso), es útil para verificar la conexión en general.

Copié el ejemplo de mi propia publicación:https://github.com/vitaly-t/pg-promise/issues/81

A continuación se muestra un ejemplo de cómo hacerlo de dos maneras al mismo tiempo, para que pueda elegir el enfoque que más le guste.

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);
});

Salidas:

CN: postgresql://userName:########@host:port/database EVENT: getaddrinfo ENOTFOUND host host:5432 ERROR: getaddrinfo ENOTFOUND host host:5432

Cada error en la biblioteca se informa primero a través del controlador de eventos de error global, y solo entonces el error se informa dentro del .catch correspondiente controlador.

Actualizar

Enfoque moderno para probar la conexión + obtener la versión del servidor en un solo paso:

// 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
}

Enlaces

  • Método de conexión
  • Error de evento