PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Sprawdź połączenie z bazą danych za pomocą pg-promise podczas uruchamiania aplikacji

Jestem autorem pg-promise;) I nie jest to pierwsze pytanie, które zadaję, więc tutaj szczegółowo je wyjaśniam.

Kiedy tworzysz instancję nowego obiektu bazy danych w ten sposób:

const db = pgp(connection);

...wszystko, co robi - tworzy obiekt, ale nie próbuje się połączyć. Biblioteka jest zbudowana na górze puli połączeń i tylko rzeczywiste metody zapytań żądają połączenia z puli.

Z oficjalnej dokumentacji:

Obiekt db reprezentuje protokół bazy danych z leniwym połączeniem z bazą danych, tj. tylko rzeczywiste metody zapytań przejmują i zwalniają połączenie. Dlatego powinieneś utworzyć tylko jedną globalną/współdzieloną db obiekt na szczegóły połączenia.

Możesz jednak wymusić połączenie, wywołując metodę connect, jak pokazano dalej. I chociaż ta metoda nie jest zalecanym sposobem łączenia zapytań (w tym celu należy używać zadań), przydaje się ogólnie do sprawdzania połączenia.

Skopiowałem przykład z własnego postu:https://github.com/vitaly-t/pg-promise/issues/81

Poniżej znajduje się przykład wykonania tego na dwa sposoby w tym samym czasie, dzięki czemu możesz wybrać podejście, które Ci się bardziej podoba.

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

Wyjścia:

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

Każdy błąd w bibliotece jest najpierw zgłaszany przez globalną procedurę obsługi zdarzeń błędów, a dopiero potem błąd jest zgłaszany w odpowiednim pliku .catch przewodnik.

Aktualizacja

Nowoczesne podejście do testowania połączenia + uzyskanie wersji serwera w jednym 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
}

Linki

  • Metoda połączenia
  • Błąd zdarzenia


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kolejka zadań jako tabela SQL z wieloma konsumentami (PostgreSQL)

  2. Używanie wyrażenia regularnego w WHERE w Postgres

  3. Którą wersję PostgreSQL używam?

  4. Odrzuć część milisekundową ze znacznika czasu

  5. Zapytanie PostgreSQL z 'ANY' nie działa