sql >> Databáze >  >> RDS >> PostgreSQL

Při spouštění aplikace ověřte připojení k databázi pomocí pg-promise

Jsem autorem pg-promise;) A není to poprvé, co je tato otázka položena, proto ji zde uvádím podrobné vysvětlení.

Když vytvoříte instanci nového databázového objektu takto:

const db = pgp(connection);

...vše, co dělá - vytváří objekt, ale nesnaží se připojit. Knihovna je postavena na vrcholu fondu připojení a pouze skutečné metody dotazu vyžadují připojení z fondu.

Z oficiální dokumentace:

Objekt db představuje databázový protokol s líným databázovým připojením, tj. pouze skutečné metody dotazu získávají a uvolňují připojení. Proto byste měli vytvořit pouze jeden globální/sdílený db objekt podle podrobností o připojení.

Spojení však můžete vynutit voláním metody connect, jak je uvedeno dále. A i když tato metoda není doporučeným způsobem pro řetězení dotazů (k tomu by se měly používat Tasks), přijde vhod pro kontrolu připojení obecně.

Zkopíroval jsem příklad z mého vlastního příspěvku:https://github.com/vitaly-t/pg-promise/issues/81

Níže je uveden příklad, jak to udělat dvěma způsoby současně, takže si můžete vybrat, který přístup se vám líbí víc.

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

Výstupy:

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

Každá chyba v knihovně je nejprve hlášena prostřednictvím obslužné rutiny globální chybové události a teprve poté je chyba hlášena v rámci odpovídajícího .catch handler.

Aktualizovat

Moderní přístup k testování připojení + získání verze serveru v jednom kroku:

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

Odkazy

  • Metoda připojení
  • Chyba události


  1. jak upravit velikost sloupce

  2. Jaké je nastavení zobrazení časové části s datem ve vývojáři Oracle PL/SQL?

  3. Migrace z Oracle na PostgreSQL – co byste měli vědět

  4. Oracle DB:Jak mohu napsat dotaz bez ohledu na velikost písmen?