sql >> Databasteknik >  >> RDS >> PostgreSQL

Verifiera databasanslutning med pg-promise när du startar en app

Jag är författaren till pg-promise;) Och det är inte första gången den här frågan ställs, så jag ger den en detaljerad förklaring här.

När du instansierar ett nytt databasobjekt så här:

const db = pgp(connection);

...allt det gör - skapar objektet, men det försöker inte ansluta. Biblioteket är byggt ovanpå anslutningspoolen, och endast de faktiska frågemetoderna begär en anslutning från poolen.

Från den officiella dokumentationen:

Objekt db representerar databasprotokollet, med lat databasanslutning, det vill säga endast de faktiska frågemetoderna förvärvar och släpper anslutningen. Därför bör du bara skapa en global/delad db objekt per anslutningsinformation.

Du kan dock tvinga fram en anslutning genom att anropa metoden connect, som visas längre fram. Och även om den här metoden inte är ett rekommenderat sätt för kedja av frågor (uppgifter bör användas för det), är det praktiskt att kontrollera anslutningen i allmänhet.

Jag kopierade exemplet från mitt eget inlägg:https://github.com/vitaly-t/pg-promise/issues/81

Nedan är ett exempel på att göra det på två sätt samtidigt, så att du kan välja vilket tillvägagångssätt du gillar bäst.

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

Utgångar:

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

Varje fel i biblioteket rapporteras först genom den globala felhändelsehanteraren, och först därefter rapporteras felet inom motsvarande .catch hanterare.

Uppdatera

Modern metod för att testa anslutning + få serverversion i ett steg:

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

Länkar

  • Anslutningsmetod
  • Händelsefel


  1. Exportera MySQL-databas med PHP

  2. Hur binder man parametrar till en rå DB-fråga i Laravel som används på en modell?

  3. Hitta värden som inte innehåller siffror i SQLite

  4. Hur använder jag cascade delete med SQL Server?