PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Xác minh kết nối cơ sở dữ liệu với pg-promise khi khởi động ứng dụng

Tôi là tác giả của pg-promise;) Và đây không phải là lần đầu tiên câu hỏi này được đặt ra, vì vậy tôi sẽ giải thích chi tiết về nó ở đây.

Khi bạn khởi tạo một đối tượng cơ sở dữ liệu mới như thế này:

const db = pgp(connection);

... tất cả những gì nó làm - tạo ra đối tượng, nhưng nó không cố gắng kết nối. Thư viện được xây dựng trên đầu nhóm kết nối và chỉ các phương thức truy vấn thực tế mới yêu cầu kết nối từ nhóm.

Từ tài liệu chính thức:

Đối tượng db đại diện cho giao thức cơ sở dữ liệu, với kết nối cơ sở dữ liệu lười biếng, tức là chỉ các phương thức truy vấn thực tế mới có được và giải phóng kết nối. Do đó, bạn chỉ nên tạo một db chung / chung chi tiết đối tượng cho mỗi kết nối.

Tuy nhiên, bạn có thể buộc kết nối, bằng cách gọi phương thức kết nối, như được hiển thị thêm. Và mặc dù phương pháp này không phải là cách được khuyến nghị để xâu chuỗi các truy vấn (Nên sử dụng các tác vụ cho việc đó), nhưng nó có ích cho việc kiểm tra kết nối nói chung.

Tôi đã sao chép ví dụ từ bài đăng của chính mình:https://github.com/vitaly-t/pg-promise/issues/81

Dưới đây là ví dụ về việc thực hiện đồng thời theo hai cách, vì vậy bạn có thể chọn bất kỳ cách tiếp cận nào bạn thích tốt hơn.

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

Kết quả đầu ra:

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

Mọi lỗi trong thư viện lần đầu tiên được báo cáo thông qua trình xử lý sự kiện lỗi chung và chỉ sau đó lỗi mới được báo cáo trong .catch tương ứng xử lý.

Cập nhật

Phương pháp hiện đại để kiểm tra kết nối + tải phiên bản máy chủ trong một bước:

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

Liên kết

  • Phương thức kết nối
  • Lỗi sự kiện


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để chọn bằng mệnh đề WITH RECURSIVE

  2. Ánh xạ văn bản PostgreSQL [] [] kiểu và kiểu Java

  3. Các khái niệm về Tính khả dụng cao của Oracle trong PostgreSQL

  4. Chỉ trả về các giá trị số từ một cột cơ sở dữ liệu PostgreSQL

  5. Cách lấy thời gian hiện tại (không có múi giờ) trong PostgreSQL