sql >> Databáze >  >> RDS >> PostgreSQL

Časový limit dotazu v pg-promise

Od autora pg-promise...

pg-promise nepodporuje zrušení dotazu, protože je to hack, jak obejít nesprávný návrh databáze nebo špatné provedení dotazu.

PostgreSQL podporuje události, které by se měly používat při provádění časově náročných dotazů, takže místo čekání lze nastavit, aby se posluchač událostí spustil, když budou k dispozici konkrétní data/pohled. Viz příklad LISTEN/NOTIFY.

Můžete rozšířit pg-promise o svou vlastní metodu dotazu, která vyprší s odmítnutím (viz příklad níže), ale to je opět další řešení vedle problému s návrhem.

Příklad použití 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 */);

Pak můžete použít db.queryTimeout(query, values, delay) na každé úrovni.

Alternativně, pokud používáte Bluebird, můžete řetězit .timeout(delay) na kteroukoli ze stávajících metod:

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

Viz také:

  • prodloužit událost
  • Bluebird.timeout

AKTUALIZACE

Od verze 8.5.3 začal pg-promise podporovat časové limity dotazů prostřednictvím vlastnosti query_timeout v objektu připojení.

Výchozí hodnoty můžete buď přepsat:

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

Nebo jej zadejte v objektu připojení:

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

    query_timeout: 3000
});



  1. Získání oprávnění ke spuštění xp_cmdshell

  2. Jak zálohovat / exportovat databázi MySQL pomocí PHP

  3. Sečíst sloupce s hodnotami null v oracle

  4. JSON_UNQUOTE() – Odstranění nabídek z dokumentu JSON v MySQL