पीजी-वादा के लेखक की ओर से...
पीजी-वादा क्वेरी रद्दीकरण का समर्थन नहीं करता है, क्योंकि यह गलत डेटाबेस डिजाइन या खराब क्वेरी निष्पादन के आसपास काम करने के लिए एक हैक है।
PostgreSQL उन घटनाओं का समर्थन करता है जिनका उपयोग समय लेने वाली क्वेरी को निष्पादित करते समय किया जाना चाहिए, इसलिए प्रतीक्षा करने के बजाय, कोई विशिष्ट डेटा/दृश्य उपलब्ध होने पर ईवेंट श्रोता को ट्रिगर करने के लिए सेट कर सकता है। उदाहरण देखें/सूचित करें।
आप अपनी खुद की कस्टम क्वेरी विधि के साथ पीजी-वादा का विस्तार कर सकते हैं जो अस्वीकार के साथ समय समाप्त हो जाएगा (नीचे उदाहरण देखें), लेकिन यह फिर से एक डिजाइन समस्या के शीर्ष पर एक और कामकाज है।
ब्लूबर्ड का उपयोग करने का उदाहरण:
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)
. का उपयोग कर सकते हैं हर स्तर पर।
वैकल्पिक रूप से, यदि आप ब्लूबर्ड का उपयोग कर रहे हैं, तो आप .timeout(delay)
. को चेन कर सकते हैं मौजूदा तरीकों में से किसी के लिए:
db.any(query, values)
.timeout(500)
.then(data => {})
.catch(error => {})
यह भी देखें:
- इवेंट का विस्तार करें
- ब्लूबर्ड.टाइमआउट
अपडेट करें
संस्करण 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
});