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

टाइपप्रति से पोस्टग्रेज से कनेक्शन हैंग हो जाता है

सूचना

टीएलडीएस! (बहुत लंबा स्किम करें)! जवाब लंबा और समृद्ध है! आप स्किम कर सकते हैं! यह अच्छी तरह से तैयार है!

यदि आप बहुत जल्दी में हैं !आप प्रमाणित करें check की जांच कर सकते हैं अनुभाग, सीक्वेलाइज़-टाइपस्क्रिप्ट (सीक्वेलाइज़ नहीं) अनुभाग, सीक्वेलाइज़-टाइपस्क्रिप्ट अनुभाग।

और बेहतर होगा कि आप सीधे जा सकते हैं करने के लिए नर्क खंड! नोडज के बारे में जानें v14 HELL ! (सीधे अंत तक जाएं! थोड़ा ऊपर)।

यह भी जांचें FIX (पोस्टग्रेज v14 HELL)

मैंने शुरू किया और जानने से पहले मैंने खुद को बहुत कुछ लिखा!

सुपर गाइड

मूल रूप से अगली कड़ी सिर्फ लटका नहीं चाहिए! लेकिन एक त्रुटि फेंक दो!

कोड स्रोत को देख रहे हैं

sync को देखकर कोड यहां

 async sync(options) {
    // ...

    // no models defined, just authenticate
    if (!models.length) {
      await this.authenticate(options);
    } else {
      for (const model of models) await model.sync(options);
    }
    if (options.hooks) {
      await this.runHooks('afterBulkSync', options);
    }
    return this;
  }

फांसी की संभावनाओं को आसानी से देखा जा सकता है!

लॉगिंग

ऐसी विसंगतियों को दूर करने के लिए सबसे पहले अच्छा लॉगिंग . होना जरूरी है !

और आप यहां जांच सकते हैं कि लॉगिंग कैसे जोड़ें! हालांकि सामान्य रूप से अगली कड़ी में डिफ़ॉल्ट रूप से सक्रिय क्वेरी की लॉगिंग होती है!

https://sequelize.org/master/manual/getting-started.html #लॉगिंग

const sequelize = new Sequelize('sqlite::memory:', {
  // Choose one of the logging options
  logging: console.log,                  // Default, displays the first parameter of the log function call
  logging: (...msg) => console.log(msg), // Displays all log function call parameters
  logging: false,                        // Disables logging
  logging: msg => logger.debug(msg),     // Use custom logger (e.g. Winston or Bunyan), displays the first parameter
  logging: logger.debug.bind(logger)     // Alternative way to use custom logger, displays all messages
});

प्रमाणीकरण की जांच करें

अगर लॉगिंग नहीं होती है! इसका मतलब यह हो सकता है कि सीक्वल कुछ भी नहीं था और शुरुआत में ही लटका हुआ है! प्रमाणीकरण का परीक्षण करने के लिए और यदि कनेक्शन काम कर रहा है!

आप प्रमाणीकृत . के साथ परीक्षण कर सकते हैं :

https://sequelize.org/master/manual/getting -started.html#testing-the-connection

try {
  console.log('Gonna authenticate'); // <== to make sure console.log is working and not overrided!
  await sequelize.authenticate();
  console.log('Connection has been established successfully.');
} catch (error) {
  console.error('Unable to connect to the database:', error);
}

अगर आपको कोई लॉगिंग नहीं मिलती है! और Gonna authenticate ठीक मुद्रित! फिर प्रक्रिया प्रमाणीकरण . पर लटकी हुई है . जो प्रमाणीकरण में समस्या का सुझाव देते हैं!

अपने क्रेडेंशियल जांचें

सुनिश्चित करें कि आपने कोई गलती नहीं की है!

psql या किसी अन्य बाहरी क्लाइंट से कनेक्टिविटी जांचें

  • अगर यह काम नहीं करता है! यह पोस्टग्रेज सर्वर के साथ एक समस्या का सुझाव देता है! या कुछ विन्यास!
  • अगर यह काम करता है! तब समस्या नोडज में है! और आपका कार्यक्रम!

POSTGRES ड्राइवर (या आपका db ड्राइवर) स्थापित करना न भूलें

दस्तावेज़ के अनुसार:https://sequelize.org/master/manual/ get-started.html#installing

# One of the following:
$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
$ npm install --save mariadb
$ npm install --save sqlite3
$ npm install --save tedious # Microsoft SQL Server

आदेशों में से एक! सुनिश्चित करें कि आप इसे नहीं भूले!

क्या हो रहा है इसे समझना और डीबग करना बेहतर है! (कोड स्रोत लॉगिंग)

डीबग करने का सबसे अच्छा तरीका! और वास्तव में निर्धारित करें कि समस्या कहाँ हो रही है! स्रोत कोड में लॉग जोड़कर है अपने आप! एक तेज़ तरीका मेरे लिए सीधे node_modules पर ऐसा करना है . मैंने सीक्वल रेपो पर गिट खोला! खोजबीन की! sync . का स्थान निर्धारित किया , authenticate , query ! सभी sequelize.js . में रहते हैं ! आप यहां देख सकते हैं ! > authenticate( . के तरीकों पर जाने के लिए कोई भी CTRL + F कर सकता है [( ]. वैसे भी! आप node_modules . में भी ऐसा ही कर सकते हैं ! और लॉग जोड़ना शुरू करें! आपको पता चल जाएगा कि समस्या किस हिस्से में हो रही है! जो समस्या को दूर करने में आपकी मदद करते हैं!

दूसरा तरीका है कांटा ! और अपने कांटे का प्रयोग करें! और बस बेहतर काम करें!

लेकिन मम्म! नोड_मॉड्यूल एक तेज़ तरीका है ! आप एक प्रति ले सकते हैं ! बहुत! यह सुनिश्चित करने के लिए कि आप अपने लॉग नहीं खोते हैं! एक बार जब आप अपडेट कर लेंगे! अंत में साफ करें बस पूरे मॉड्यूल को हटाकर! और पुनः स्थापित करें! या बस लॉग निर्माण को उलट दें (पूर्ववत करें)! मुझे यह डिबगिंग का एक दिलचस्प तरीका लगता है!

लेकिन इसे एक त्रुटि देनी चाहिए

आम तौर पर यह चाहिए! कोड स्रोत देखकर आप बेहतर जान सकते हैं! आम तौर पर एक त्रुटि फेंक दी जानी चाहिए! लेकिन अगर कोई प्रक्रिया लटक जाती है! और कोई त्रुटि नहीं फेंकी जाती है! तब आप इस तरह के परिणाम की उम्मीद कर सकते हैं! यहाँ वह ड्राइवर लापता हो सकता है! यह भी सुनिश्चित करें कि console.log . ठीक काम कर रहा है! और आखिरी बात! MMM nodejs के साथ एक समस्या हो सकती है स्वयं (अंतिम भाग देखें)।

मैं सीक्वलाइज़-टाइपस्क्रिप्ट (सीक्वेलाइज़ नहीं) का उपयोग कर रहा हूँ

जानना बहुत जरूरी है! सीक्वलाइज़-टाइपस्क्रिप्ट सिर्फ एक सीक्वेलाइज़ रैपर है! वह वहाँ टाइपप्रति समर्थन जोड़ने के लिए था! यह सज्जाकार और कुछ सुविधाएँ प्रदान करता है! इसके अलावा अगली कड़ी v5 से ! सीक्वल में टाइपस्क्रिप्ट सीधे समर्थित है! यहां देखेंhttps://sequelize.org/master/manual/typescript.html नवीनतम संस्करण में अगली कड़ी-टाइपप्रति! अगली कड़ी के मूल घोषणा प्रकारों का भी उपयोग किया गया!

सीक्वेलाइज़-टाइपक्रिप्ट रैप सीक्वेलाइज़ के रूप में! अगली कड़ी के दस्तावेज़ों को सत्यापित करना सुनिश्चित करें!

ध्यान देने योग्य बात यह भी है कि कुछ लोग चिल्लाते हैं :सज्जाकार का प्रयोग न करें! एमएमएमएम! मम्म! और एक और mmmm!https://stackoverflow.com/a/6069189/7668448

सीक्वेलाइज़-टाइपस्क्रिप्ट

यदि आप सीक्वेलाइज़-टाइपस्क्रिप्ट का उपयोग कर रहे हैं, तो सुनिश्चित करें कि sequelize-typescript . का संस्करण है और sequelize मिलान करें ! दस्तावेज़ के अनुसार V5 अगली कड़ी का! मुझे लगता है V6 भी करना चाहिए! और v1 अगली कड़ी-टाइपस्क्रिप्ट के लिए!

npm install [email protected] [email protected]

और दस्तावेज़ के अनुसार टाइपस्क्रिप्ट आवश्यक पैकेज को न भूलें!
https:/ /www.npmjs.com/package/sequelize-typescript

(आप दस्तावेज़ में ही उन सभी सूचनाओं की जांच और सत्यापन कर सकते हैं)

सीक्वेलाइज़-टाइपस्क्रिप्ट का उपयोग क्यों करें?

जैसा कि पहले ही उल्लेख किया गया है! V5 . से शुरू होने वाली टाइपस्क्रिप्ट के लिए Sequelize के पास मूल समर्थन है . यहां के अनुसार . तो इसके ऊपर रैपर का इस्तेमाल क्यों करें! वह भी सज्जाकार का उपयोग करें! (मैं सज्जाकारों के खिलाफ नहीं हूं! कुछ हैं! यहां के अनुसार )

अपने आप से पूछें क्यों? क्या सीक्वल-टाइपस्क्रिप्ट के लिए कुछ है! देशी तरीके से तुलना करने वाला एक महत्वपूर्ण प्लस? अगर कुछ स्पष्ट है! कृपया टिप्पणियों में उनका उल्लेख करें! और मैं अपडेट करूंगा! यह खंड!

और अगर नहीं! जातक बेहतर हो सकता है! एक निर्भरता या बहुत कम!

प्रोजेक्ट कॉन्फ़िगरेशन

tsconfig!

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es6",
        "moduleResolution": "node",
        "rootDir": "./src",
        "outDir": "./dist",
        "lib": [
            "es2015",
            "es2016",
            "dom"
        ],
        "declaration": true,
        "experimentalDecorators": true,
        "esModuleInterop": true
    },
    "include": [
        "src/**/*"
    ],
    "exclude": [
        "node_modules/**/*",
        "src/**/*.test.tsx",
        "src/**/*.story.tsx",
        "test/**/*"
    ]
}

जोड़ने के लिए वे दो महत्वपूर्ण चीजें हैं।

"experimentalDecorators": true,
"esModuleInterop": true

लेकिन यह आपकी समस्या नहीं होनी चाहिए! अन्यथा परियोजना संकलन त्रुटियों को फेंक देगी!

नर्क

नोड जेएस संस्करण (V14 नरक)

और हाँ! वह कारण हो सकता है! हो सकता है कि आप पहले से ही यह सब ठीक पहले ही करते थे! और फिर किसी नए कंप्यूटर या परिवेश में! यह अब और काम नहीं कर रहा है !

नोड संस्करण समस्या हो सकती है ! नोड v15 और नोड v14 ! यह एक ज्ञात समस्या है! मैंने खुद एक बार knex.js के साथ सामना किया था और postgres (knex.js एक क्वेरी बिल्डर है)! तो आप देख सकते हैं कि संबंधित है! मेरी कहानी में कोड मेरे लैपटॉप और पुराने वीपीएस पर ठीक काम कर रहा था जिसमें हमने तैनात किया था! लेकिन फिर मैंने विंडोज़ आरडीपी पर तैनात किया! और मम्म! बूम! फिर मैंने कुछ देर के लिए अपने बाल खींचे! मैंने प्रतिबिंबित किया और जाँच की! कोई बदलाव नहीं था! और फिर मैं हे के पास आया! मैंने केवल नोडज अपडेट किया है! और बाद में मैंने पाया कि अन्य लोगों को भी इसी बात का सामना करना पड़ा! संक्षेप में! यह सब nodejs v14 . पर शुरू हुआ (मैं इसे v14 हेल . कहता हूं )! आप इसके बारे में मेरा जवाब देख सकते हैं यहां

और जाहिरा तौर पर एक ही समस्या हमेशा होती है nodejs v15 . के साथ !

इस धागे के सवाल में! हमने इसकी पुष्टि की! मेरे डेस्कटॉप में सभी ने अच्छा काम किया! Nodejs v12 ! और मेरे दोस्त कंप्यूटर के साथ! यह नहीं था! nodejs v14 और nodejs v15 . तब मैं पुष्टि करना चाहता था! मैंने nodejs v15 installed इंस्टाल किया है और कैबूम! बिंगो! निष्पादन अप्रत्याशित रूप से रुक जाता है! कोई लॉगिंग नहीं! कोई त्रुटि नहीं! v12 . में ! सब ठीक काम कर रहा था! मुझे पहले त्रुटियाँ थीं फिर मैंने उन्हें ठीक किया! और सर्वर ऊपर और चल रहा था! और अगली कड़ी DB से जुड़े हुए हैं!

यहां फांसी दी गई

V12 और v13

मैं v13 प्रदर्शित कर रहा हूँ! v12 के साथ भी ऐसा ही होता है!

nvm use v13
Now using node v13.14.0 (npm v6.14.4)
 [email protected]  ~/Documents/coderhero/Dev/projects/Fahima-ecommerce   LuckyLook  npm run dev 

> [email protected] dev /home/coderhero/Documents/coderhero/Dev/projects/Fahima-ecommerce
> npx ts-node-dev src/server.ts

[INFO] 01:49:29 ts-node-dev ver. 1.0.0 (using ts-node ver. 9.0.0, typescript ver. 4.0.5)
config ::::
{
  username: 'fahima',
  password: '123456',
  database: 'fahimashop',
  host: 'localhost',
  dialect: 'postgres'
}
hi there ::::
Executing (default): SELECT 1+1 AS result
connection established
Executing (default): CREATE TABLE IF NOT EXISTS "Products" ("id"   SERIAL , "brand" TEXT, "price" DECIMAL, "description" VARCHAR(255), "imgUrl" VARCHAR(255), "category" VARCHAR(255), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, PRIMARY KEY ("id"));
Executing (default): SELECT i.relname AS name, ix.indisprimary AS primary, ix.indisunique AS unique, ix.indkey AS indkey, array_agg(a.attnum) as column_indexes, array_agg(a.attname) AS column_names, pg_get_indexdef(ix.indexrelid) AS definition FROM pg_class t, pg_class i, pg_index ix, pg_attribute a WHERE t.oid = ix.indrelid AND i.oid = ix.indexrelid AND a.attrelid = t.oid AND t.relkind = 'r' and t.relname = 'Products' GROUP BY i.relname, ix.indexrelid, ix.indisprimary, ix.indisunique, ix.indkey ORDER BY i.relname;
server running http://localhost:8100
press CTRL+C to stop server, please :)

कूल वर्किंग नो प्रॉब्लम

V14 और v15 निष्पादन

v14

 [email protected]  ~/Documents/coderhero/Dev/projects/Fahima-ecommerce   LuckyLook  node -v        
v14.15.0
 [email protected]  ~/Documents/coderhero/Dev/projects/Fahima-ecommerce   LuckyLook  npm run dev

> [email protected] dev /home/coderhero/Documents/coderhero/Dev/projects/Fahima-ecommerce
> npx ts-node-dev src/server.ts

[INFO] 02:07:35 ts-node-dev ver. 1.0.0 (using ts-node ver. 9.0.0, typescript ver. 4.0.5)
config ::::
{
  username: 'fahima',
  password: '123456',
  database: 'fahimashop',
  host: 'localhost',
  dialect: 'postgres'
}
hi there ::::
 [email protected]  ~/Documents/coderhero/Dev/projects/Fahima-ecommerce   LuckyLook  

और ओह! प्रोग्राम बिना किसी त्रुटि आउटपुट के अप्रत्याशित रूप से बाहर निकल रहा है!

V15

 [email protected]  ~/Documents/coderhero/Dev/projects/Fahima-ecommerce   LuckyLook  nvm use v15    
Now using node v15.0.1 (npm v7.0.3)
 [email protected]  ~/Documents/coderhero/Dev/projects/Fahima-ecommerce   LuckyLook  npm run dev

> [email protected] dev
> npx ts-node-dev src/server.ts

[INFO] 02:10:48 ts-node-dev ver. 1.0.0 (using ts-node ver. 9.0.0, typescript ver. 4.0.5)
config ::::
{
  username: 'fahima',
  password: '123456',
  database: 'fahimashop',
  host: 'localhost',
  dialect: 'postgres'
}
hi there ::::
 [email protected]  ~/Documents/coderhero/Dev/projects/Fahima-ecommerce   LuckyLook  

और फिर से विपक्ष! प्रोग्राम बिना किसी त्रुटि आउटपुट के अप्रत्याशित रूप से बाहर निकल रहा है!

v14 . में भी कोई अंतर नहीं है और v15 ! यह V14 HELL है ।

संक्षेप में

V14 हेल एक ज्ञात और बहुत संभावित कारण है! pg में कोई समस्या है मॉड्यूल मुझे लगता है! v14 . पर कुछ बदला और इस समस्या का कारण बना!

संक्षेप में! अगर कुछ समझ में नहीं आ रहा है! और अगर आपका वही कोड पहले काम कर रहा था! करने के लिए पहली बात! नोडज के साथ जांचना है v13 या v12 ! जो आपको पागलपन से बचा सकता है! कौन कहेगा कि नोडज का संस्करण और एक नया एक ऐसी समस्या पैदा करेगा!

यह समस्या क्या है! नोडज में V14 HELL क्या है?

अगर मेरी तरह आप विवरण जानना चाहते हैं और क्या हुआ !?

नोड V14 के साथ! एपीआई पर कुछ ब्रेकिंग बदलाव हुए! और भी बहुत कुछ बदल गया! Openssl संस्करण सहित!

पोस्टग्रेज के लिए! और pg मापांक! समस्या इस टिप्पणी में बताई गई थी। इसके अनुसार थ्रेड :

और इसके अनुसार PR !

आप इस भिन्न में परिवर्तन देख सकते हैं

संक्षेप में उल्लेखानुसार! onReadySate . के लिए व्यवहार net.Socket . के लिए बदला गया !और कार्यान्वित समाधान onReadyState . का उपयोग नहीं करना था बिल्कुल!

और इसके अनुसार

इस लाइन को चेक करें

पुराने संस्करण में कनेक्ट तभी कहा जाता था जब सॉकेट closed . पर हो राज्य! readyState उपयोग समाप्त हो गया है!

आप समझ सकते हैं! कार्यान्वयन के आधार पर! उन मूल परिवर्तनों से कई चीज़ें प्रभावित हो भी सकती हैं और नहीं भी!

प्रासंगिक नोड परिवर्तन

और क्योंकि मैं देखना चाहता था कि परिवर्तन कहाँ होता है! यहां आप जाएं और जांच कर सकते हैं

https://github.com/nodejs/node/pull/32272

कोई भी परिवर्तनों का लॉग भी देख सकता है:

https://github.com/nodejs/node/blob /मास्टर/डॉक/चेंजलॉग्स/CHANGELOG_V14.md

फिक्स (पोस्टग्रेज v14 हेल)

मेरे उत्तर के अनुसार यहां

अपग्रेड करें pg ड्राइवर को >=8.0.3 ! आप बस नवीनतम में अपग्रेड कर सकते हैं!

npm install [email protected] --save

और आप हमारी समस्या की जांच कर सकते हैं

v7 . पर पुराना संस्करण

v8 में अपडेट हो रहा है

node v15 के साथ फिर से चल रहा है

तारा! और इसने कमाल का काम किया!

और अगर आप postgres . का उपयोग नहीं कर रहे हैं ! और समस्या थी v14 HELL ! मतलब आपने v13 . के साथ परीक्षण किया . और यह काम किया! फिर अपने डीबी ड्राइवर को नवीनतम में अपग्रेड करने का प्रयास करें!

नोड v14 + निकास और कोई लॉगिंग त्रुटि क्यों नहीं

ब्रेकिंग परिवर्तनों का भी उल्लेख करने के लिए! बनाया गया pg connect() call . पर प्रक्रिया से बाहर निकलें . और इसने इसे बाहर कर दिया! और लॉगिंग देखनी थी!इसके लिए और विस्तार से! यहाँ यह कैसे हुआ! सीक्वेलाइज़ में पोस्टग्रेज़ बोली कार्यान्वयन है! जो पीजी का उपयोग करते हैं! और पीजी क्लाइंट! एक कनेक्शन बनाएँ! कनेक्शन में connect है प्रतिस्पर्धा! जब यह कनेक्ट होता है तो इसे उत्सर्जित करता है! और क्योंकि नोड v14 व्यवहार को खुले से शुरू करने के लिए बदलता है! स्ट्रीम कनेक्शन छोड़ दिया गया है! और धारा को जुड़ा हुआ माना जाता है! कहाँ नहीं है! और connect घटना सीधे उत्सर्जित होती है! जब ऐसा होता है! क्लाइंट या तो requestSsl() . पर कॉल करेगा या startup() कनेक्शन ऑब्जेक्ट की विधि! और दोनों this._stream.write को कॉल करेंगे . क्योंकि धारा जुड़ी नहीं है! एक त्रुटि होती है! यह त्रुटि पकड़ में नहीं आ रही है! फिर अगली कड़ी में ड्राइवर का वादा! अनसुलझे रहेंगे! और फिर इवेंट लूप खाली हो जाता है! डिफ़ॉल्ट व्यवहार से Nodejs बस बाहर निकलें!

आप कोड की पंक्तियों के माध्यम से चरण देख सकते हैं:

नोडज क्यों बाहर निकलते हैं (अनसुलझे वादे)

https://github.com/nodejs/node/issues/22088

नोड बिना किसी त्रुटि के बाहर निकलता है और वादे की प्रतीक्षा नहीं करता (इवेंट कॉलबैक)

क्या होता है जब कोई वादा कभी हल नहीं होता?

एनवीएम

https://github.com/nvm-sh/nvm

अगर आपको नहीं पता कि nvm क्या है है! या आप nvm का उपयोग नहीं कर रहे हैं . इसका उपयोग करने पर विचार करें! चूंकि यह एक बहुत ही रोचक उपकरण है! Nvm एक नोड संस्करण प्रबंधन उपकरण है !

एनवीएम बदलने, डिबगिंग और परीक्षण के साथ और नोडज के विभिन्न संस्करणों के साथ! तेज़ और तेज़ है! और इसलिए समानांतर में नोडज के नए संस्करण स्थापित करना!

सीक्वेलाइज.सिंक () के बारे में नोट करें ()

इसका उपयोग production . के लिए न करें ! या बिलकुल! (अधिकांश ORM! और क्वेरी बिल्डर (knex.js) माइग्रेशन का उपयोग करते हैं)।

https://sequelize.org/master/manual/model -basics.html#synchronization-in-production

दस्तावेज़ से




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL का उपयोग करके DBeaver पर ऑटो इंक्रीमेंटिंग/सीरियल आईडी कॉलम कैसे बनाएं?

  2. एंटिटी फ्रेमवर्क कोर पोस्टग्रेएसक्यूएल जेसन क्वेरी

  3. Postgres . का उपयोग करके एकाधिक स्कीमा से सभी रिकॉर्ड चुनें (पुनर्प्राप्त करें)

  4. डिजिटल ओशन पोस्टग्रेज प्रबंधित डेटाबेस से कनेक्ट करने के लिए नोड.जेएस पर्यावरण चर में एसएसएल प्रमाणपत्र (सीए-सर्टिफिकेट) कैसे जोड़ें?

  5. प्रश्नों को समकालिक रूप से निष्पादित करें