PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Проверете връзката с базата данни с pg-promise при стартиране на приложение

Аз съм автор на pg-promise;) И това не е първият път, когато се задава този въпрос, затова му давам подробно обяснение тук.

Когато инстанцирате нов обект на база данни по този начин:

const db = pgp(connection);

...всичко, което прави - създава обекта, но не се опитва да се свърже. Библиотеката е изградена върху пула от връзки и само действителните методи на заявка изискват връзка от пула.

От официалната документация:

Обект db представлява протокола на базата данни с мързелива връзка към базата данни, т.е. само действителните методи на заявка придобиват и освобождават връзката. Следователно, трябва да създадете само един глобален/споделен db обект за подробности за връзката.

Въпреки това, можете да установите връзка, като извикате метод connect, както е показано по-нататък. И въпреки че този метод не е препоръчителен начин за верижно свързване на заявки (за това трябва да се използват Tasks), той е полезен за проверка на връзката като цяло.

Копирах примера от моята публикация:https://github.com/vitaly-t/pg-promise/issues/81

По-долу е даден пример да го правите по два начина едновременно, така че можете да изберете кой подход ви харесва повече.

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

Изходи:

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

Всяка грешка в библиотеката първо се докладва чрез глобалния манипулатор на събитие за грешка и едва след това грешката се отчита в съответния .catch манипулатор.

Актуализиране

Модерен подход за тестване на връзката + получаване на сървърна версия в една стъпка:

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

Връзки

  • Свързване на метод
  • Грешка при събитие


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвате няколко израза WITH в една заявка на PostgreSQL?

  2. PostgreSQL Където условие за броене

  3. Как Asind() работи в PostgreSQL

  4. Изберете първия ред във всяка група GROUP BY?

  5. входният файл изглежда е дъмп на текстов формат. Моля, използвайте psql