sql >> Database >  >> RDS >> PostgreSQL

Query time-out in pg-promise

Van de auteur van pg-promise...

pg-promise ondersteunt het annuleren van zoekopdrachten niet, omdat het een hack is om een ​​onjuist databaseontwerp of een slechte uitvoering van zoekopdrachten te omzeilen.

PostgreSQL ondersteunt gebeurtenissen die moeten worden gebruikt bij het uitvoeren van tijdrovende zoekopdrachten, dus in plaats van te wachten, kan men een gebeurtenislistener instellen die wordt geactiveerd wanneer specifieke gegevens/weergaven beschikbaar komen. Zie voorbeeld LISTEN/NOTIFY.

Je kunt pg-promise uitbreiden met je eigen aangepaste querymethode die een time-out krijgt met een afwijzing (zie voorbeeld hieronder), maar dat is weer een andere oplossing bovenop een ontwerpprobleem.

Voorbeeld met 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 */);

Dan kunt u db.queryTimeout(query, values, delay) . gebruiken op elk niveau.

Als alternatief, als je Bluebird gebruikt, kun je .timeout(delay) . koppelen naar een van de bestaande methoden:

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

Zie ook:

  • evenement verlengen
  • Bluebird.timeout

UPDATE

Vanaf versie 8.5.3 is pg-promise begonnen met het ondersteunen van query-time-outs, via eigenschap query_timeout binnen het verbindingsobject.

U kunt de standaardinstellingen overschrijven:

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

Of specificeer het binnen het verbindingsobject:

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

    query_timeout: 3000
});



  1. SQL Less Than () Operator voor beginners

  2. Hoe SQL-injectie-aanvallen te voorkomen door Secure

  3. Hoe de huidige datum in PL/SQL te krijgen?

  4. Verbind ODBC-applicaties op Windows met Zoho CRM