PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Време за изчакване на заявка в pg-promise

От автора на pg-promise...

pg-promise не поддържа анулиране на заявка, защото е хак за заобикаляне на неправилен дизайн на база данни или лошо изпълнение на заявка.

PostgreSQL поддържа събития, които трябва да се използват при изпълнение на отнемащи време заявки, така че вместо да чака, човек може да настрои слушател на събитие да се задейства, когато конкретни данни/изглед станат достъпни. Вижте примера LISTEN/NOTIFY.

Можете да разширите pg-promise със свой собствен персонализиран метод на заявка, който ще изтече с отхвърляне (вижте примера по-долу), но това отново е още едно заобикаляне на проблема в допълнение към проблем с дизайна.

Пример за използване на 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 */);

След това можете да използвате db.queryTimeout(query, values, delay) на всяко ниво.

Като алтернатива, ако използвате Bluebird, можете да верига .timeout(delay) към някой от съществуващите методи:

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

Вижте също:

  • разширете събитие
  • Bluebird.timeout

АКТУАЛИЗИРАНЕ

От версия 8.5.3 pg-promise започна да поддържа изчакване на заявка чрез свойство query_timeout в обекта за връзка.

Можете да отмените настройките по подразбиране:

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

Или го посочете в обекта за връзка:

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. Как работи make_timestamptz() в PostgreSQL

  2. Създаване на студен режим на готовност за PostgreSQL с помощта на Amazon AWS

  3. Как да направите резервно копие на функции само в Postgres

  4. Генериране на данни и качество на хардуера

  5. Основно наблюдение на PostgreSQL – част 2