sql >> Database teknologi >  >> RDS >> PostgreSQL

Bekræft databaseforbindelsen med pg-promise, når du starter en app

Jeg er forfatter til pg-promise;) Og det er ikke første gang, dette spørgsmål stilles, så jeg giver det en detaljeret forklaring her.

Når du instansierer et nyt databaseobjekt som dette:

const db = pgp(connection);

...alt det gør - skaber objektet, men det forsøger ikke at forbinde. Biblioteket er bygget oven på forbindelsespuljen, og kun de faktiske forespørgselsmetoder anmoder om en forbindelse fra poolen.

Fra den officielle dokumentation:

Objekt db repræsenterer databaseprotokollen med doven databaseforbindelse, dvs. kun de faktiske forespørgselsmetoder erhverver og frigiver forbindelsen. Derfor bør du kun oprette én global/delt db objekt pr. forbindelsesdetaljer.

Du kan dog gennemtvinge en forbindelse ved at kalde metoden Connect, som vist yderligere. Og selvom denne metode ikke er en anbefalet måde at kæde forespørgsler på (opgaver skal bruges til det), er det praktisk at tjekke for forbindelsen generelt.

Jeg kopierede eksemplet fra mit eget indlæg:https://github.com/vitaly-t/pg-promise/issues/81

Nedenfor er et eksempel på at gøre det på to måder på samme tid, så du kan vælge den tilgang, du bedst kan lide.

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

Udgange:

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

Hver fejl i biblioteket rapporteres først gennem den globale fejlhændelseshandler, og først derefter rapporteres fejlen i den tilsvarende .catch handler.

Opdater

Moderne tilgang til at teste forbindelse + få serverversion i ét trin:

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

  • Tilslutningsmetode
  • Hændelsesfejl


  1. Hvordan rettes indholdsudbyderens url, der ikke findes i Android-indholdsudbyderen?

  2. Har du problemer med MS Access Crashing? Prøv disse løsninger først

  3. Omvendt streng ord for ord ved hjælp af SQL

  4. Gør det nemmere at administrere en PostgreSQL-produktionsdatabase