PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Vérifier la connexion à la base de données avec pg-promise lors du démarrage d'une application

Je suis l'auteur de pg-promise;) Et ce n'est pas la première fois que cette question est posée, alors je lui donne une explication détaillée ici.

Lorsque vous instanciez un nouvel objet de base de données comme ceci :

const db = pgp(connection);

... tout ce qu'il fait - crée l'objet, mais il n'essaie pas de se connecter. La bibliothèque est construite au-dessus du pool de connexions, et seules les méthodes de requête réelles demandent une connexion à partir du pool.

De la documentation officielle :

Objet db représente le protocole de base de données, avec une connexion à la base de données paresseuse, c'est-à-dire que seules les méthodes de requête réelles acquièrent et libèrent la connexion. Par conséquent, vous ne devez créer qu'une seule db globale/partagée objet par détails de connexion.

Cependant, vous pouvez forcer une connexion en appelant la méthode connect, comme indiqué plus loin. Et bien que cette méthode ne soit pas recommandée pour enchaîner les requêtes (les tâches doivent être utilisées pour cela), elle est pratique pour vérifier la connexion en général.

J'ai copié l'exemple de mon propre post :https://github.com/vitaly-t/pg-promise/issues/81

Vous trouverez ci-dessous un exemple de le faire de deux manières en même temps, afin que vous puissiez choisir l'approche qui vous convient le mieux.

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

Sorties :

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

Chaque erreur dans la bibliothèque est d'abord signalée via le gestionnaire d'événements d'erreur global, puis l'erreur est signalée dans le .catch correspondant gestionnaire.

Mettre à jour

Approche moderne pour tester la connexion + obtenir la version du serveur en une seule étape :

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

Liens

  • Méthode de connexion
  • Erreur d'événement