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

Batas waktu kueri di pg-promise

Dari penulis pg-promise...

pg-promise tidak mendukung pembatalan kueri, karena ini adalah peretasan untuk mengatasi desain basis data yang salah atau eksekusi kueri yang buruk.

PostgreSQL mendukung acara yang harus digunakan saat menjalankan kueri yang memakan waktu, jadi alih-alih menunggu, seseorang dapat mengatur pendengar acara untuk dipicu saat data/tampilan tertentu tersedia. Lihat contoh DENGARKAN/BERITAHU.

Anda dapat memperluas pg-promise dengan metode kueri kustom Anda sendiri yang akan habis waktu dengan penolakan (lihat contoh di bawah), tapi itu sekali lagi solusi lain di atas masalah desain.

Contoh menggunakan 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 */);

Kemudian Anda dapat menggunakan db.queryTimeout(query, values, delay) pada setiap tingkat.

Atau, jika Anda menggunakan Bluebird, Anda dapat membuat rantai .timeout(delay) ke salah satu metode yang ada:

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

Lihat juga:

  • perpanjang acara
  • Bluebird.timeout

PERBARUI

Dari versi 8.5.3, pg-promise mulai mendukung waktu tunggu kueri, melalui properti query_timeout dalam objek koneksi.

Anda dapat mengganti default:

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

Atau tentukan dalam objek koneksi:

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. Di Redshift/Postgres, bagaimana cara menghitung baris yang memenuhi suatu kondisi?

  2. Bagaimana cara mendapatkan hitungan hari Minggu bulan ini di psql?

  3. urutan byte tidak valid untuk pengkodean UTF8

  4. Bagaimana cara mendapatkan akhir hari?

  5. Data Besar dengan PostgreSQL dan Apache Spark