ServBay macOS स्थानीय डेवेलपमेंट वातावरण PostgreSQL समस्या निवारण मार्गदर्शिका
PostgreSQL एक शक्तिशाली और फीचर-सम्पन्न ओपन सोर्स ऑब्जेक्ट-रिलेशनल डाटाबेस सिस्टम है, जिसे विभिन्न प्रकार के वेब एप्लिकेशन और डेटा स्टोरेज परिदृश्यों में बड़े पैमाने पर उपयोग किया जाता है। ServBay स्थानीय डेवेलपमेंट वातावरण के कोर पैकेजों में से एक के रूप में, PostgreSQL सामान्यतः स्थिर रूप से चलता है। हालांकि, कुछ परिस्थितियों में, आप PostgreSQL पैकेज के स्टार्ट न होने, कनेक्शन फेल होने, प्रदर्शन कम होने या डेटा एक्सेस में असामान्यता जैसी समस्याओं का सामना कर सकते हैं।
यह दस्तावेज़ ServBay इस्तेमाल करने वाले डेवेलपर्स के लिए एक विस्तृत PostgreSQL समस्या निवारण गाइड के रूप में बनाया गया है। इसमें हम ServBay वातावरण में PostgreSQL पैकेज से जुड़ी आम समस्याएँ, डाईग्नोस्टिक स्टेप्स और उनके समाधान प्रस्तुत करते हैं। कृपया ध्यान दें कि ServBay macOS ऑपरेटिंग सिस्टम पर चलता है, और इसमें PostgreSQL के विभिन्न संस्करण इंटीग्रेटेड होते हैं, इसलिए किसी भी डायग्नोस्टिक्स या मरम्मत करते समय, आपको संबंधित वर्शन नंबर, कॉन्फ़िगरेशन फाइल या डेटा डायरेक्टरी पथ निर्दिष्ट करना पड़ सकता है।
अवलोकन
यह गाइड आपको ServBay वातावरण में PostgreSQL पैकेज का प्रबंधन और उपयोग करते समय आने वाली तकनीकी समस्याओं पर केंद्रित है। हम सबसे सामान्य समस्याओं, जैसे पैकेज स्टार्टअप या कनेक्शन, से शुरू कर धीमे-धीमे अग्रिम मुद्दों—प्रदर्शन बाधाएँ, अचानक क्रैश, बैकअप और रिस्टोर—तक बढ़ेंगे। यहां दिए गए चरणों का पालन कर आप अधिकांश PostgreSQL संबंधी समस्याओं का व्यवस्थित ढंग से निदान और समाधान कर सकते हैं।
आवश्यक पूर्व-शर्तें
समस्या निवारण शुरू करने से पहले सुनिश्चित करें की आपने निम्नलिखित तैयारियाँ कर ली हैं:
- ServBay ऐप्लिकेशन को सफलतापूर्वक इंस्टॉल और चला लिया है।
- ServBay के माध्यम से वह PostgreSQL पैकेज वर्शन इंस्टॉल कर लिया है जिसमें समस्या आ रही है।
- आपको macOS कमांड लाइन संचालन की बुनियादी जानकारी है।
- आपको अपने PostgreSQL पैकेज का कॉन्फ़िगरेशन पथ और डेटा डायरेक्टरी पथ ज्ञात है (आमतौर पर
/Applications/ServBay/db/postgresql/<version>
में)। - आप अपने इच्छित डाटाबेस का नाम, यूज़रनेम व पासवर्ड जानते हैं।
सामान्य समस्याएँ एवं समाधान
1. PostgreSQL पैकेज स्टार्ट नहीं हो रहा
जब आप ServBay के माध्यम से PostgreSQL पैकेज स्टार्ट करने का प्रयास करते हैं, परन्तु उसकी स्थिति 'रुका हुआ' या 'स्टार्ट फेल' आती है, तो निम्न कारण हो सकते हैं।
संभावित कारण
- कॉन्फ़िगरेशन फाइल में सिंटैक्स एरर या कन्फ्लिक्ट है।
- PostgreSQL पैकेज द्वारा प्रयुक्त पोर्ट (डिफ़ॉल्ट 5432) पहले से सिस्टम के किसी अन्य प्रोसेस द्वारा इस्तेमाल हो रहा है।
- ServBay या PostgreSQL डेटा डायरेक्टरी, कॉन्फ़िगरेशन फाइल आदि के पास आवयश्यक रीड/राइट अनुमति नहीं है।
- PostgreSQL डेटा डायरेक्टरी करप्ट है।
- ServBay का आंतरिक प्रशासनिक मुद्दा।
समाधान
ServBay GUI स्टेटस व लॉग की जांच करें: सबसे पहले, ServBay ऐप्लिकेशन इंटरफेस खोलें और PostgreSQL पैकेज की स्थिति देखें। यदि स्थिति असामान्य है, तो मैन्युअली GUI से स्टार्ट करने का प्रयास करें। ServBay का मेन लॉग या PostgreSQL पैकेज का स्पेसिफ़िक लॉग (यदि GUI में उपलब्ध हो) देखें। आमतौर पर ServBay के लॉग
/Applications/ServBay/logs/
डायरेक्टरी में होतें हैं।postgresql/<version>/postgresql-<version>.log
फाइल में अक्सर स्टार्ट फेल के डिटेल्ड एरर मिलेंगे।कॉन्फ़िगरेशन फाइल जांचें: PostgreSQL की मुख्य कॉन्फ़िगरेशन फाइल
postgresql.conf
है। सुनिश्चित करें कि इसमें कोई टाइपो, गलत/अमान्य विकल्प न हों। उदाहरणार्थ, ServBay इंटीग्रेटेड PostgreSQL 13 पैकेज के लिए उसका पथ:bash/Applications/ServBay/db/postgresql/13/postgresql.conf
1एक अन्य महत्वपूर्ण कॉन्फ़िगरेशन है
pg_hba.conf
, जो क्लाइंट ऑथेंटिकेशन को नियंत्रित करता है। इसकी गलत सेटिंग से कनेक्शन या स्टार्ट (यदि इंटरनल कनेक्शन चेक लगे हों) में समस्या हो सकती है।हालांकि PostgreSQL के पास सम्पूर्ण कॉन्फ़िगरेशन वेलिडेट करने का CLI टूल नहीं है, आप लॉग फाइल से लोडिंग एरर देख सकते हैं। या, चल रहे डेटाबेस (शायद कोई दूसरा वर्शन या टेम्प. इंस्टेंस) से जांच सकते हैं। सबसे प्रत्यक्ष तरीका लॉग पढ़ना है।
pg_hba.conf
के नियम देखने के लिए कनेक्ट होने के बाद यह SQL इस्तेमाल करें:sql-- सफल कनेक्शन के बाद ही चलाएं SELECT * FROM pg_hba_file_rules();
1
2कॉन्फ़िगरेशन फाइल एरर के लिए:
sql-- सफल कनेक्शन के बाद ही चलाएं SELECT sourcefile, name, sourceline, error FROM pg_file_settings WHERE error IS NOT null;
1
2नोट: उपरोक्त SQL तब ही काम आएँगे जब PostgreSQL पैकेज पहले ही चल रहा हो; स्टार्ट न होने की स्थिति में मुख्यतः लॉग फाइल देखना आवश्यक है।
पोर्ट ऑक्यूपेंसी जांचें: PostgreSQL डिफ़ॉल्ट 5432 पोर्ट सुनता है। यदि यह पोर्ट किसी अन्य प्रोसेस से व्यस्त है, PostgreSQL स्टार्ट नहीं होगा।
lsof
से जांचें:bashlsof -i :5432
1अगर आउटपुट मिले तो पोर्ट बिजी है। PID से प्रोसेस पहचानें और उसे बंद करें अथवा PostgreSQL का पोर्ट बदलें (
postgresql.conf
मेंport
सेटिंग) व फिर ServBay GUI/CLI से रीलोड/रीस्टार्ट करें।फाइल व डायरेक्टरी परमिशन जांचें: ServBay को इंस्टालेशन और सबडायरेक्ट्री में पूरी रीड/राइट अनुमति चाहिए। PostgreSQL डेटा व कॉन्फ़िगरेशन पर भी प्रक्रिया को परमिशन होनी चाहिए। Service आम तौर पर आपके यूज़र से ही चलेगी, अतः
/Applications/ServBay/
और भीतर की फ़ाइलों पर यूज़र/समूह को लिखने की इजाजत हो:bashls -ld /Applications/ServBay/db/postgresql/13 # डेटा डायरेक्टरी परमिशन जांचें ls -l /Applications/ServBay/db/postgresql/13/postgresql.conf # मुख्य फ़ाइल परमिशन जांचें ls -l /Applications/ServBay/db/postgresql/13/pg_hba.conf # ऑथ फ़ाइल परमिशन जांचें
1
2
3अगर परमिशन गलत हैं तो
chmod
याchown
से सुधारें, लेकिन आम तौर पर ServBay इंस्टाल पर सही सेट हो जाते हैं। यदि समस्या आए तो इंस्टालेशन अधूरी है या फाइलें बदल गई हैं।डेटा डायरेक्टरी करप्शन जांचें: PostgreSQL की डेटा डायरेक्टरी (data directory) सभी डाटाबेस फाइलें संग्रहीत करती है। करप्ट होने (जैसे, अचेत शटडाउन या डिस्क एरर) पर स्टार्ट नहीं होगा। लॉग में इसके संकेत मिलेंगे। मरम्मत के लिए सर्वप्रथम बैकअप बना लें, फिर टूल्स जैसे
pg_resetwal
का बहुत सावधानी से इस्तेमाल करें—अन्यथा डेटा लॉस संभावित है।ServBay कमांड से रिस्टार्ट का प्रयास करें: उपरोक्त जांच के बाद, ServBay CLI से पैकेज रीस्टार्ट करें, जैसे —
bashservbayctl restart postgresql 13
1या GUI द्वारा।
2. PostgreSQL से कनेक्शन नहीं हो रहा
PostgreSQL पैकेज 'रनिंग' दिखता है, लेकिन आप क्लाइंट टूल्स (जैसे psql
, pgAdmin
या ऐप कोड) से कनेक्ट नहीं कर पा रहे।
संभावित कारण
- PostgreSQL वास्तव में पूरी तरह स्टार्ट नहीं है या किसी गड़बड़ी से चल रहा है।
pg_hba.conf
कनेक्शन परमिट नहीं करता।- फ़ायरवॉल ने कनेक्शन ब्लॉक किया है।
- कनेक्शन पैरामीटर (होस्ट, पोर्ट, डाटाबेस नाम, यूज़र, पासवर्ड) गलत हैं।
- यूज़र के पास डाटाबेस में कनेक्ट का अधिकार नहीं।
समाधान
ServBay GUI/
servbayctl
से पैकेज स्टेटस जांचें: फिर एक बार GUI में देखें क्या पैकेज “रनिंग” दिख रहा है। अन्यथा ऊपर “PostgreSQL स्टार्ट नहीं हो रहा” सेक्शन देखें। CLI से भी जांचें —bashservbayctl status postgresql 13
1pg_hba.conf
ऑथेंटिकेशन सेटिंग जांचें: यह फाइल तय करती है कौन यूज़र, कौन डाटाबेस किस होस्ट से किस तरीके से कनेक्ट कर सकता है। स्थानीय डेवेलपमेंट में कम-से-कमlocalhost
/127.0.0.1
का प्रवेश आवश्यक है।फाइल का लोकेशन उदाहरण:
/Applications/ServBay/db/postgresql/13/pg_hba.conf
। नियम कुछ ऐसे दिख सकते हैं:ini# TYPE DATABASE USER ADDRESS METHOD host all servbay-demo 127.0.0.1/32 md5 host all servbay-demo ::1/128 md5
1
2
3बदलने के बाद रीलोड करें:
bashservbayctl reload postgresql 13
1या GUI से।
फ़ायरवॉल सेटिंग जांचें: macOS का फ़ायरवॉल या कोई थर्ड पार्टी ऐप पोर्ट 5432 ब्लॉक कर सकता है। सुनिश्चित करें कि
/Applications/ServBay/bin/postgres
की इनकमिंग कनेक्शन की अनुमति है:bash# ऐप को अनुमति सूची में जोड़ें sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/ServBay/bin/postgres # सुनिश्चित करें कि ऐप ब्लॉक नहीं है sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /Applications/ServBay/bin/postgres
1
2
3
4कनेक्शन पैरामीटर व यूज़र परमिशन जांचें: होस्ट (आमतौर पर
localhost
/127.0.0.1
), पोर्ट, यूज़र, पासवर्ड इत्यादि सही जांचें। कनेक्शन टेस्ट के लिए:bashpsql -U your_username -d your_database -h localhost -p 5432
1कामयाबी पर psql प्रॉम्प्ट मिलेगा; विफलता पर एरर के आधार पर जांच करें। अगर केवल खास टेबल या डाटाबेस एक्सेस नहीं हो पा रहा, तो
\du
से यूज़र के रोल और अधिकार देखें:sql-- psql में चलाएं \du
1
2ज़रूरत होने पर उपयुक्त यूज़र को
GRANT
से अधिकार दें।
3. प्रदर्शन समस्याएँ
PostgreSQL शुरू है और जुड़ पा रहे हैं, पर क्वेरीज़ धीमी हैं या सामान्य लॉन्च/रीड/राइट स्लो है।
संभावित कारण
- SQL क्वेरी अनुकूलित नहीं है।
- डाटाबेस स्कीमा अनुचित है।
- कैश/मेमोरी सेटिंग अनुपयुक्त हैं।
- जरूरी इंडेक्स नहीं हैं।
- हार्डवेयर सीमित (CPU, RAM, डिस्क I/O) है।
- डाटाबेस सांख्यिकीय आंकड़े (statistics) पुराने हो गए हैं।
समाधान
क्वेरी का विश्लेषण व अनुकूलन करें: क्वेरी एक्सेक्यूशन प्लान देखने के लिए
EXPLAIN
याEXPLAIN ANALYZE
चलाएं:sql-- psql या अन्य SQL क्लाइंट में EXPLAIN ANALYZE SELECT * FROM your_table_name WHERE column_name = 'value';
1
2आउटपुट देखकर क्वेरी रीराइट, इंडेक्स जोड़ें या स्कीमा एडजस्ट करें।
PostgreSQL कॉन्फिगरेशन पैरामीटर समायोजित करें:
postgresql.conf
में दो मुख्य पैरामीटर हैं:shared_buffers
: डाटाबेस डेटा के लिए RAM में कितनी बफरिंग हो; जितना ज़्यादा, सामान्यतः उतना अच्छा, पर RAM का ~25% से ज्यादा न दें।work_mem
: क्वेरी के लिए सॉर्ट/हैशिंग आदि क्या RAM सीमा; बड़ी Query के लिए इसे बढ़ाने से फायदा होगा। बदलाव के बाद Reload/Restart करें।
inishared_buffers = 1GB # उदाहरण: 4GB RAM है तो work_mem = 64MB # अपनी Query के अनुसार
1
2उचित इंडेक्स बनाएं: मुख्य WHERE/JOIN/ORDER BY कॉलम पर Index बनाएं:
sqlCREATE INDEX idx_column_name ON your_table_name(column_name);
1लेकिन ध्यान रखें गैरजरूरी इंडेक्स लिखावट व स्पेस बढ़ा देते हैं।
सांख्यिकीय आंकड़े (Statistics) अपडेट करें: क्वेरी ऑप्टिमाईजर तेज़ प्लान के लिए accurate स्टैट्स चाहता है। डाटा अपडेट/डिलीट/इन्सर्ट के बाद
ANALYZE
चलाएं:sqlANALYZE; -- या विशेष टेबल पर ANALYZE your_table_name;
1
2
3हार्डवेयर रिसोर्स जांचें: बड़ी डाटाबेस/कठिन Query पर macOS डिवाइस के CPU, RAM, डिस्क बाधा बन सकते हैं। Activity Monitor खोलकर जांचें। मेकैनिकल ड्राइव के मुकाबले SSD काफी तेज़ होते हैं।
4. डाटाबेस क्रैश
PostgreSQL अचानक बंद या अनुत्तरदायी (unresponsive) हो जाता है।
संभावित कारण
- हार्डवेयर विफलता (RAM या डिस्क समस्या)।
- ओएस समस्या या संसाधन सीमा।
- स्वयं PostgreSQL में बग (दुर्लभ, विशेष वर्शन/परिस्थिति में)।
- डेटा डायरेक्टरी करप्ट है।
- गलत कॉन्फ़िगरेशन से संसाधन थकान (जैसे बहुत ज़्यादा कनेक्शन)।
समाधान
PostgreSQL एरर लॉग देखें: क्रैश के समय
/Applications/ServBay/logs/postgresql/<version>/postgresql-<version>.log
मेंFATAL
याERROR
संदेशों के लिए जांचें, ख़ास ध्यान घटना समय के आसपास।सिस्टम लॉग चेक करें: macOS की Console ऐप से देख सकते हैं कि किसी हार्डवेयर या पत्र OS स्तर की त्रुटि के संकेत तो नहीं हैं।
हार्डवेयर सस्था की जांच करें: macOS डाइग्नोस्टिक्स या थर्ड पार्टी टूल्स से RAM व डिस्क टेस्ट करें। डिस्क एरर डाटाबेस करप्शन के सामान्य कारण हैं।
डेटा डायरेक्टरी की मरम्मत या पुनर्निर्माण (सावधानी से): अगर लॉग में करप्ट डायरेक्टरी दिखे: a. बैकअप बनाएं। b. पुराने डायरेक्टरी को हटा नया इनिशियलाइज करें (
initdb
), आवश्यकता पड़े तो ServBay से रीइंस्टॉल करें। c. बैकअप सेpg_restore
याpsql
द्वारा पुनर्स्थापित करें। डाईरेक्ट रीकवरिंग टूल्स (जैसेpg_resetwal
) जोखिमपूर्ण हैं; डेटा लॉस हो सकता है।बैकअप से रिस्टोर करें: अगर रीकवरी संभव न हो —
/Applications/ServBay/backup/postgresql/<version>/
में उपलब्ध बैकअप से पुनर्स्थापना करें।
5. बैकअप और बहाली (रिस्टोर) समस्याएँ
ServBay PostgreSQL पैकेज का खुद-ब-खुद या मैनुअल बैकअप संभव करता है। बैकअप या रिस्टोर में समस्याओं के लिए यह समाधान देखें।
संभावित कारण
- बैकअप फाइल करप्ट/अधूरी है।
- रिस्टोर कमांड या पैरामीटर गलत हैं।
- लक्ष्य डाटाबेस मौजूद नहीं या यूज़र अधिकार नहीं है।
- डिस्क स्पेस कम है।
- बैकअप/रीस्टोर के दौरान इंटरप्ट हुआ।
समाधान
बैकअप फाइल की संपूर्णता जांचें: बैकअप फाइल (
pg_dump
या ServBay के लिए बनाई) का साइज़ उपयुक्त है या नहीं, देखें। TEXT फाइल हो तो शुरुआत/अंत Examine करें। कस्टम या डायरेक्टरी फ़ार्मेट परpg_restore
ही एरर बताएगा। ServBay बैकअप पथ –bash/Applications/ServBay/backup/postgresql/13/your_backup_file.dump
1साइज़ के लिए
ls -lh
देखें।सही रीस्टोर कमांड (
pg_restore
याpsql
) इस्तेमाल करें:- TEXT फ़ार्मेट (pg_dump -Fp):
psql
से रिस्टोर करें।bashpsql -U your_username -d your_database -h localhost -p 5432 -f /path/to/your_backup_file.sql
1your_database
का पहले से बनना ज़रूरी है। - Custom (
-Fc
) या Directory (-Fd
) Format:pg_restore
इस्तेमाल करें।bashयहाँ भी टारगेट डाटाबेस तैयार है? देख लें। यूज़र को सभी ऑब्जेक्ट क्रिएट करने लायक अधिकार चाहिए—आमतौर पर owner यूज़र याpg_restore -U your_username -d your_database -h localhost -p 5432 /path/to/your_backup_file.dump
1postgres
(सुपरयुज़र) बढ़िया रहेगा।
- TEXT फ़ार्मेट (pg_dump -Fp):
लक्ष्य डाटाबेस की मौजूदगी सुनिश्चित करें: Restore करने से पहले target database create करें:
bashcreatedb -U your_username -h localhost -p 5432 your_database
1या ServBay GUI/DB टूल्स से बनाएं।
डिस्क स्पेस जांचें: बड़े बैकअप रीस्टोर के लिए अपेक्षित स्पेस होनी ही चाहिए।
ServBay बैकअप सेटिंग्स और लॉग जांचें: यदि ऑटो-बैकअप में परेशानी हो तो बैकअप से संबंधित configuration व लॉग देखें। ServBay में बैकअप schedule, target व retention policy नियंत्रित की जा सकती हैं।
सामान्य प्रश्न (FAQ)
प्र.: अब मुझे ServBay में PostgreSQL की डेटा डायरेक्टरी कहाँ मिलेगी? उ.: आमतौर पर
/Applications/ServBay/db/postgresql/<version>/data
पर, जहाँ<version>
आपके इंस्टॉल किए PostgreSQL पैकेज का वर्शन है (उदा.13
)।postgresql.conf
वpg_hba.conf
उसी डायरेक्टरी में या उसके पास मिलेंगे।प्र.: PostgreSQL के
postgres
यूज़र का पासवर्ड सर्वबे में कैसे रीसेट करें? उ.:- सर्वबे में PostgreSQL पैकेज को रोक दें।
pg_hba.conf
(उदा./Applications/ServBay/db/postgresql/13/pg_hba.conf
) में, local कनेक्शन के लिए temporary ‘trust’ मोड कर दें:
```ini # TYPE DATABASE USER ADDRESS METHOD local all all peer # या md5 host all all 127.0.0.1/32 md5 # या scram-sha-256 इत्यादि ``` बदली हुई: ```ini # TYPE DATABASE USER ADDRESS METHOD local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust ```
- PostgreSQL पैकेज ServBay में स्टार्ट करें।
psql
के जरिएpostgres
यूज़र से बिना पासवर्ड कनेक्ट करें:
```bash psql -U postgres -h localhost -p 5432 ```
psql
में:
```sql ALTER USER postgres PASSWORD 'new_secure_password'; ``` `'new_secure_password'` को अपनी नयी पसंद के पासवर्ड से बदलें। दूसरे यूज़र के लिए username वहां रखें।
\q
से psql बंद करें।- महत्वपूर्ण: PostgreSQL को रोककर
pg_hba.conf
से 'trust' हटाकर पुनः सुरक्षित method (md5
,scram-sha-256
आदि) डालें। फिर PostgreSQL रिस्टार्ट या रीलोड करें।
प्र.: क्या ServBay PostgreSQL का हाई-अवेलेबिलिटी या रेप्लिकेशन सपोर्ट करता है? उ.: ServBay मुख्यतः स्थानीय डेवेलपमेंट के लिए है, न कि प्रोडक्शन स्टाइल हाई-अवेलेबिलिटी/रेप्लिकेशन कॉन्फिग GUI के साथ। हालाँकि आप स्वयं PostgreSQL की स्ट्रीमिंग रेप्लिकेशन आदि जैसे फीचर कस्टमाइज़्ड कॉन्फ़िगरेशन एवं CLI के प्रयोग से सेट कर सकते हैं, लेकिन इसमें PostgreSQL के गहरे ज्ञान की आवश्यकता है।
प्र.: ServBay में PostgreSQL पैकेज वर्शन अपग्रेड कैसे करें? उ.: ServBay पर आप एक साथ एक से अधिक PostgreSQL वर्शन रख सकते हैं। अपग्रेड हेतु आम तौर पर नया, उच्च वर्शन इंस्टॉल करें और फिर PostgreSQL के
pg_upgrade
टूल से पुराने वर्शन के डेटा डायरेक्ट्री को नये वर्शन में माइग्रेट करें। इसमें दोनों वर्शन स्टॉप कर,pg_upgrade
चलाकर, फिर नया वर्शन शुरू करना होता है। विस्तृत स्टेप्स हेतु PostgreSQL की ऑफिशियलpg_upgrade
डॉक्युमेंट देखें। ServBay वर्शन-स्पेसिफिक डाटा अलग-अलग डायरेक्टरी में रखता है, जिससे यह प्रक्रिया आसान रहती है।