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

PostgreSQL को केवल मेमोरी में चलाना

(इन-मेमोरी पोस्टग्रेएसक्यूएल का उपयोग करने और इसे सामान्य बनाने से मेरे उत्तर को स्थानांतरित करना):

आप Pg इन-प्रोसेस, इन-मेमोरी नहीं चला सकते

<ब्लॉककोट>

मैं यह पता नहीं लगा सकता कि परीक्षण के लिए इन-मेमोरी पोस्टग्रेज डेटाबेस को कैसे चलाया जाए। क्या यह संभव है?

नहीं, यह संभव नहीं है। PostgreSQL को C में लागू किया गया है और प्लेटफ़ॉर्म कोड में संकलित किया गया है। H2 या डर्बी के विपरीत आप केवल jar . लोड नहीं कर सकते और इसे एक थ्रोअवे इन-मेमोरी डीबी के रूप में फायर करें।

SQLite के विपरीत, जिसे C में भी लिखा जाता है और प्लेटफ़ॉर्म कोड में संकलित किया जाता है, PostgreSQL को इन-प्रोसेस में लोड नहीं किया जा सकता है। इसके लिए कई प्रक्रियाओं (प्रति कनेक्शन एक) की आवश्यकता होती है क्योंकि यह एक मल्टीप्रोसेसिंग है, मल्टीथ्रेडिंग नहीं, आर्किटेक्चर। मल्टीप्रोसेसिंग आवश्यकता का मतलब है कि आपको जरूरी पोस्टमास्टर को एक स्टैंडअलोन प्रक्रिया के रूप में लॉन्च करें।

इसके बजाय:कनेक्शन को पहले से कॉन्फ़िगर करें

मेरा सुझाव है कि किसी विशेष होस्टनाम/उपयोगकर्ता नाम/पासवर्ड के काम करने की अपेक्षा करने के लिए, और परीक्षण हार्नेस CREATE DATABASE होने की अपेक्षा करने के लिए बस अपने परीक्षण लिखें। एक थ्रोअवे डेटाबेस, फिर DROP DATABASE दौड़ के अंत में। गुण फ़ाइल से डेटाबेस कनेक्शन विवरण प्राप्त करें, लक्ष्य गुण, पर्यावरण चर, आदि बनाएं।

मौजूदा पोस्टग्रेएसक्यूएल इंस्टेंस का उपयोग करना सुरक्षित है, आपके पास पहले से ही ऐसे डेटाबेस हैं जिनकी आप परवाह करते हैं, जब तक कि आप जिस उपयोगकर्ता को अपने यूनिट परीक्षणों में आपूर्ति करते हैं वह नहीं है एक सुपरयूज़र, केवल CREATEDB with वाला उपयोगकर्ता अधिकार। कम से कम आप अन्य डेटाबेस में प्रदर्शन समस्याएँ पैदा करेंगे। मैं इस कारण से परीक्षण के लिए पूरी तरह से पृथक PostgreSQL इंस्टॉल चलाना पसंद करता हूं।

इसके बजाय:परीक्षण के लिए एक सामान्य पोस्टग्रेएसक्यूएल इंस्टेंस लॉन्च करें

वैकल्पिक रूप से, यदि आप वास्तव में . हैं उत्सुक आप अपने परीक्षण हार्नेस initdb . का पता लगा सकते हैं और postgres बायनेरिज़, initdbचलाएँ डेटाबेस बनाने के लिए, pg_hba.conf को संशोधित करें करने के लिए trust , postgresचलाएं इसे एक यादृच्छिक बंदरगाह पर शुरू करने के लिए, उपयोगकर्ता बनाएं, डीबी बनाएं, और परीक्षण चलाएं। आप एक जार में एकाधिक आर्किटेक्चर के लिए PostgreSQL बायनेरिज़ को बंडल भी कर सकते हैं और परीक्षण चलाने से पहले वर्तमान आर्किटेक्चर के लिए अस्थायी निर्देशिका में अनपैक कर सकते हैं।

व्यक्तिगत रूप से मुझे लगता है कि यह एक बड़ा दर्द है जिससे बचा जाना चाहिए; बस एक परीक्षण डीबी कॉन्फ़िगर करना आसान है। हालांकि, include_dir . के आगमन के साथ यह थोड़ा आसान हो गया है postgresql.conf . में समर्थन; अब आप केवल एक पंक्ति जोड़ सकते हैं, फिर बाकी सभी के लिए एक जेनरेट की गई कॉन्फ़िगरेशन फ़ाइल लिख सकते हैं।

PostgreSQL के साथ तेज़ परीक्षण

सुरक्षित रूप से . करने के तरीके के बारे में अधिक जानकारी के लिए परीक्षण उद्देश्यों के लिए PostgreSQL के प्रदर्शन में सुधार, एक विस्तृत उत्तर देखें जो मैंने पहले इस विषय पर लिखा था:तेजी से परीक्षण के लिए PostgreSQL का अनुकूलन करें

H2 की PostgreSQL बोली सही विकल्प नहीं है

कुछ लोग इसके बजाय परीक्षण चलाने के लिए PostgreSQL बोली मोड में H2 डेटाबेस का उपयोग करते हैं। मुझे लगता है कि यह लगभग उतना ही बुरा है जितना कि रेल लोग परीक्षण के लिए SQLite और उत्पादन परिनियोजन के लिए PostgreSQL का उपयोग करते हैं।

H2 कुछ PostgreSQL एक्सटेंशन का समर्थन करता है और PostgreSQL बोली का अनुकरण करता है। हालाँकि, यह बस इतना ही है - एक अनुकरण। आपको ऐसे क्षेत्र मिलेंगे जहां H2 एक प्रश्न को स्वीकार करता है लेकिन PostgreSQL नहीं करता है, जहां व्यवहार भिन्न होता है, आदि। आपको ऐसे बहुत से स्थान भी मिलेंगे जहां PostgreSQL कुछ ऐसा करने का समर्थन करता है जो H2 नहीं कर सकता - जैसे विंडो फ़ंक्शन, के समय लेखन।

यदि आप इस दृष्टिकोण की सीमाओं को समझते हैं और आपकी डेटाबेस पहुंच सरल है, तो H2 ठीक हो सकता है। लेकिन उस स्थिति में आप शायद एक ORM के लिए एक बेहतर उम्मीदवार हैं जो डेटाबेस को सारगर्भित करता है क्योंकि आप वैसे भी इसकी दिलचस्प विशेषताओं का उपयोग नहीं कर रहे हैं - और उस स्थिति में, आपको डेटाबेस संगतता के बारे में अब और अधिक ध्यान देने की आवश्यकता नहीं है।

टेबलस्पेस जवाब नहीं हैं!

नहीं करें "इन-मेमोरी" डेटाबेस बनाने के लिए टेबलस्पेस का उपयोग करें। न केवल यह अनावश्यक है क्योंकि यह वैसे भी प्रदर्शन में महत्वपूर्ण रूप से मदद नहीं करेगा, बल्कि यह किसी भी अन्य तक पहुंच को बाधित करने का एक शानदार तरीका है जिसे आप उसी PostgreSQL इंस्टॉल में देख सकते हैं। 9.4 दस्तावेज़ में अब निम्न चेतावनी शामिल है:

<ब्लॉककोट>

चेतावनी

मुख्य PostgreSQL डेटा निर्देशिका के बाहर स्थित होने के बावजूद, टेबलस्पेस डेटाबेस क्लस्टर का एक अभिन्न अंग है और इसे डेटा फ़ाइलों के एक स्वायत्त संग्रह के रूप में नहीं माना जा सकता है। वे मुख्य डेटा निर्देशिका में निहित मेटाडेटा पर निर्भर हैं, और इसलिए एक अलग डेटाबेस क्लस्टर से संलग्न नहीं किया जा सकता है या व्यक्तिगत रूप से बैकअप नहीं लिया जा सकता है। इसी तरह, यदि आप एक टेबलस्पेस (फ़ाइल हटाना, डिस्क विफलता, आदि) खो देते हैं, तो डेटाबेस क्लस्टर अपठनीय या अक्षम हो सकता है शुरू करने के लिए। रैमडिस्क जैसे अस्थायी फ़ाइल सिस्टम पर एक टेबलस्पेस रखने से पूरे क्लस्टर की विश्वसनीयता खतरे में पड़ जाती है।

क्योंकि मैंने देखा कि बहुत से लोग ऐसा कर रहे हैं और परेशानी में पड़ रहे हैं।

(यदि आपने ऐसा किया है तो आप mkdir . कर सकते हैं PostgreSQL को फिर से शुरू करने के लिए अनुपलब्ध टेबलस्पेस निर्देशिका, फिर DROP लापता डेटाबेस, टेबल आदि। इसे न करना ही बेहतर है।)



  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 वापसी 0 यदि लौटाया गया मान शून्य है

  2. Postgresql को ठीक करने के लिए Homebrew में रीडलाइन संस्करण 6.x पर लौटें?

  3. Django:क्वेरी समूह महीने के अनुसार

  4. JDBC प्रकार के लिए कोई बोली मानचित्रण नहीं:2003

  5. PgAdmin का उपयोग करके Postgresql तालिका डेटा निर्यात करें