PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Limit czasu zapytania w pg-promise

Od autora pg-promise...

pg-promise nie obsługuje anulowania zapytań, ponieważ jest to hack do obejścia nieprawidłowego projektu bazy danych lub złego wykonania zapytania.

PostgreSQL obsługuje zdarzenia, które powinny być używane podczas wykonywania czasochłonnych zapytań, więc zamiast czekać, można ustawić detektor zdarzeń, który ma być wyzwalany, gdy określone dane/widok staną się dostępne. Zobacz przykład SŁUCHAJ/POWIADAJ.

Możesz rozszerzyć pg-promise o własną niestandardową metodę zapytania, która przekroczy limit czasu z odrzuceniem (patrz przykład poniżej), ale jest to kolejne obejście problemu z projektem.

Przykład przy użyciu 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 */);

Następnie możesz użyć db.queryTimeout(query, values, delay) na każdym poziomie.

Alternatywnie, jeśli używasz Bluebird, możesz połączyć .timeout(delay) do dowolnej z istniejących metod:

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

Zobacz też:

  • przedłuż wydarzenie
  • Bluebird.timeout

AKTUALIZUJ

Od wersji 8.5.3 pg-promise zaczął obsługiwać limity czasu zapytań za pośrednictwem właściwości query_timeout w obiekcie połączenia.

Możesz zmienić ustawienia domyślne:

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

Lub określ go w obiekcie połączenia:

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. Dzięki sqlalchemy, jak dynamicznie łączyć się z silnikiem bazy danych na podstawie żądania

  2. Jak dodać po usunięciu ograniczeń kaskadowych?

  3. Jak działa funkcja Exp() w PostgreSQL

  4. PostgreSQL wiersz do kolumn

  5. Createuser:nie można połączyć się z postgresem bazy danych:FATAL:rola tom nie istnieje