PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Verifikasi koneksi database dengan pg-promise saat memulai aplikasi

Saya penulis pg-promise;) Dan ini bukan pertama kalinya pertanyaan ini diajukan, jadi saya memberikan penjelasan rinci di sini.

Saat Anda membuat instance objek database baru seperti ini:

const db = pgp(connection);

...semuanya - membuat objek, tetapi tidak mencoba untuk terhubung. Pustaka dibangun di atas kumpulan koneksi, dan hanya metode kueri aktual yang meminta koneksi dari kumpulan.

Dari dokumentasi resmi:

Objek db mewakili protokol basis data, dengan koneksi basis data yang lambat, yaitu hanya metode kueri aktual yang memperoleh dan melepaskan koneksi. Oleh karena itu, Anda harus membuat hanya satu db global/bersama objek per detail koneksi.

Namun, Anda dapat memaksa koneksi, dengan memanggil metode connect, seperti yang ditunjukkan lebih lanjut. Dan meskipun metode ini bukan cara yang disarankan untuk membuat kueri berantai (Tugas harus digunakan untuk itu), metode ini berguna untuk memeriksa koneksi secara umum.

Saya menyalin contoh dari posting saya sendiri:https://github.com/vitaly-t/pg-promise/issues/81

Di bawah ini adalah contoh melakukannya dengan dua cara sekaligus, sehingga Anda dapat memilih pendekatan mana yang lebih Anda sukai.

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

Keluaran:

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

Setiap kesalahan di perpustakaan pertama kali dilaporkan melalui pengendali kejadian kesalahan global, dan baru kemudian kesalahan tersebut dilaporkan dalam .catch yang sesuai. penangan.

Perbarui

Pendekatan modern untuk menguji koneksi + mendapatkan versi server dalam satu langkah:

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

Tautan

  • Metode terhubung
  • Kesalahan acara


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memeriksa apakah tabel postgresql ada di bawah python (dan mungkin Psycopg2)

  2. Simpan hasil kueri dalam variabel menggunakan di PL/pgSQL

  3. Buat diagram ER di pgAdmin

  4. Mendapatkan semua Bangunan dalam jangkauan 5 mil dari koordinat yang ditentukan

  5. Hibernate, Postgresql:Kolom x bertipe oid tetapi ekspresi bertipe byte