PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

नोड कॉलिंग अस्थायी तालिकाओं के साथ कार्य करती है जिससे स्मृति रिसाव होता है

फिर उनका इस्तेमाल न करें। जैसा कि नीचे दिखाया गया है, आप अभी भी सीधे प्रश्नों को निष्पादित कर सकते हैं।

यह पूरी तरह से गलत दृष्टिकोण नहीं है, यह सिर्फ एक बहुत ही अजीब तरीका है, क्योंकि आप कुछ ऐसा बनाने की कोशिश कर रहे हैं जिसे दूसरों द्वारा बहुत आसान उपयोग के लिए लागू किया गया है। परिणामस्वरूप, आप कई गलतियाँ कर रहे हैं जो स्मृति रिसाव सहित कई समस्याओं का कारण बन सकती हैं।

ठीक उसी उदाहरण की सादगी से तुलना करें जो pg-promise का उपयोग करता है :

var pgp = require('pg-promise')();
var conString = "postgres://username:[email protected]/database";
var db = pgp(conString);

function getJobs() {
    return db.tx(function (t) {
        return t.func('get_jobs');
    });
}

function poll() {
    getJobs()
        .then(function (jobs) {
            // process the jobs
        })
        .catch(function (error) {
            // error
        });

    setTimeout(poll, 55);
}

poll(); // start polling

ES6 सिंटैक्स का उपयोग करते समय और भी आसान हो जाता है:

var pgp = require('pg-promise')();
var conString = "postgres://username:[email protected]/database";
var db = pgp(conString);

function poll() {
    db.tx(t=>t.func('get_jobs'))
        .then(jobs=> {
            // process the jobs
        })
        .catch(error=> {
            // error
        });

    setTimeout(poll, 55);
}

poll(); // start polling

केवल एक चीज जो मुझे आपके उदाहरण में समझ में नहीं आई - एक एकल SELECT को निष्पादित करने के लिए लेन-देन का उपयोग . यह आमतौर पर लेन-देन के लिए नहीं है, क्योंकि आप कोई डेटा नहीं बदल रहे हैं। मुझे लगता है कि आप एक वास्तविक कोड को सिकोड़ने की कोशिश कर रहे थे जो आपके पास था जो कुछ डेटा को भी बदल देता है।

यदि आपको लेन-देन की आवश्यकता नहीं है, तो आपके कोड को और कम किया जा सकता है:

var pgp = require('pg-promise')();
var conString = "postgres://username:[email protected]/database";
var db = pgp(conString);

function poll() {
    db.func('get_jobs')
        .then(jobs=> {
            // process the jobs
        })
        .catch(error=> {
            // error
        });

    setTimeout(poll, 55);
}

poll(); // start polling

अपडेट करें

यह एक खतरनाक तरीका होगा, हालांकि, पिछले अनुरोध के अंत को नियंत्रित नहीं करना, जो स्मृति/कनेक्शन के मुद्दे भी पैदा कर सकता है।

एक सुरक्षित तरीका यह होना चाहिए:

function poll() {
    db.tx(t=>t.func('get_jobs'))
        .then(jobs=> {
            // process the jobs

            setTimeout(poll, 55);
        })
        .catch(error=> {
            // error

            setTimeout(poll, 55);
        });
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं टेक्स्ट को jsonB में कैसे बदलूं?

  2. PostgreSQL लेनदेन के भीतर वास्तविक समय कैसे प्राप्त करें?

  3. INSERT में अस्पष्ट कॉलम संदर्भ ... संघर्ष पर अद्यतन करें

  4. PostgreSQL के साथ धीमी क्वेरी से निपटना

  5. PostgreSQL:psql सर्वर से कनेक्ट क्यों नहीं हो सकता है?