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

Thời gian chờ truy vấn trong pg-promise

Từ tác giả của pg-promise ...

pg-promise không hỗ trợ hủy truy vấn, bởi vì việc xử lý thiết kế cơ sở dữ liệu không chính xác hoặc thực thi truy vấn không tốt là một sự tấn công.

PostgreSQL hỗ trợ các sự kiện nên được sử dụng khi thực hiện các truy vấn tốn thời gian, vì vậy thay vì chờ đợi, người ta có thể đặt trình xử lý sự kiện được kích hoạt khi có dữ liệu / chế độ xem cụ thể. Xem ví dụ LISTEN / NOTIFY.

Bạn có thể mở rộng pg-promise bằng phương pháp truy vấn tùy chỉnh của riêng mình, phương pháp này sẽ hết thời gian với một từ chối (xem ví dụ bên dưới), nhưng đó lại là một công việc khác liên quan đến vấn đề thiết kế.

Ví dụ sử dụng Bluebird:

const Promise = require('bluebird');

Promise.config({
    cancellation: true
});


const initOptions = {
    promiseLib: Promise,
    extend(obj) {
        obj.queryTimeout = (query, values, delay) => {
            return obj.any(query, values).timeout(delay);
        }
    }
};

const pgp = require('pg-promise')(initOptions);
const db = pgp(/* connection details */);

Sau đó, bạn có thể sử dụng db.queryTimeout(query, values, delay) trên mọi cấp độ.

Ngoài ra, nếu bạn đang sử dụng Bluebird, bạn có thể chuỗi .timeout(delay) đối với bất kỳ phương pháp hiện có nào:

db.any(query, values)
    .timeout(500)
    .then(data => {})
    .catch(error => {})

Xem thêm:

  • kéo dài sự kiện
  • Bluebird.timeout

CẬP NHẬT

Từ phiên bản 8.5.3, pg-promise bắt đầu hỗ trợ hết thời gian chờ truy vấn, thông qua thuộc tính query_timeout trong đối tượng kết nối.

Bạn có thể ghi đè các giá trị mặc định:

pgp.pg.defaults.query_timeout = 3000; // timeout every query after 3 seconds

Hoặc chỉ định nó trong đối tượng kết nối:

const db = pgp({
    /* all connection details */

    query_timeout: 3000
});



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách Atand () hoạt động trong PostgreSQL

  2. Làm cách nào để lấy dữ liệu cục bộ vào cơ sở dữ liệu chỉ đọc bằng dplyr?

  3. Làm cách nào để đặt tham số String [] cho một truy vấn gốc?

  4. Lấy tên bảng nguồn của hàng khi truy vấn giá trị gốc mà hàng đó kế thừa

  5. mysql_insert_id thay thế cho postgresql