OSX 10.7 लॉयन में अपग्रेड करने के बाद पोस्टग्रैस्कल की मरम्मत


196

मैंने हाल ही में OSX 10.7 में अपग्रेड किया है, जिस समय psql सर्वर से कनेक्ट करने की कोशिश करते समय मेरी रेल स्थापना पूरी तरह से बोर हो जाती है। जब मैं कमांड लाइन का उपयोग करके करता हूं

psql -U postgres

यह पूरी तरह से ठीक काम करता है, लेकिन जब मैं एक ही उपयोगकर्ता नाम और पासवर्ड के साथ रेल सर्वर या कंसोल चलाने की कोशिश करता हूं, तो मुझे यह त्रुटि मिलती है

...activerecord-3.0.9/lib/active_record/connection_adapters/postgresql_adapter.rb:950:in `initialize': could not connect to server: Permission denied (PGError) 
Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

क्या हो सकता है किसी भी विचार सुपर सहायक होगा! धन्यवाद!


यह भी मेरे कार्यालय में किसी को मारा; हमें गलत बाइनरी प्राप्त करने के साथ एक समान समस्या थी, एक अलग निर्देशिका में अलग-अलग निर्देशिकाओं में डोमेन सॉकेट्स से कनेक्ट करने की कोशिश के साथ एक अतिरिक्त समस्या है, और ऐसा लगता है कि अपग्रेड ने स्थानीय डेटाबेस पर सभी डेटा खा लिया है। सौभाग्य से यह सिर्फ एक विकास बॉक्स था, इसलिए यह बहुत बड़ी बात नहीं है, लेकिन हल्के से अप्रिय है। :)

1
मैंने आज इस पर खुद ही प्रहार किया और कल आपके प्रश्न को पढ़कर याद किया। @ जोहान वांग को देखकर अच्छा लगा और उन्होंने समझाया :) :)
रयान बिग जी

जवाबों:


291

यह एक पाथ मुद्दा है। मैक OSX लायन में अब सिस्टम में Postgresql शामिल है। यदि आप करते हैं, तो which psqlआप देखेंगे कि HomeBrew सही है usr/bin/psql, usr/local/bin/psqlजिसके बजाय आप देखेंगे । यदि आप चलाते हैं, brew doctorतो आपको एक संदेश प्राप्त करना चाहिए जिसमें आपको usr/local/binअपने पेट के एनवी चर के प्रमुख को जोड़ना होगा।

अपने .bash_profile या .profile, या जो भी शेल आप उपयोग कर रहे हैं और जोड़ रहे हैं उसे संपादित करें: export PATH=/usr/local/bin:$PATH

PATHतब के लिए पहले निर्यात के रूप में या तो आपने शेल सत्र छोड़ दिया या अपनी फ़ाइल को स्रोत के साथ छोड़ दिया source ~/.bash_profileऔर इसे अब फिर से ठीक होना चाहिए।


12
यह तय किया। आप / etc / पथों को संपादित भी कर सकते हैं और सुनिश्चित कर सकते हैं / usr / स्थानीय / बिन शीर्ष पर है
ग्रेग

153
यह भी ध्यान दें कि यदि आपने अपना रास्ता तय करने के लिए pg रत्न स्थापित किया है, तो यह गलत psll का उपयोग करेगा। यदि हां, तो pg रत्न को अनइंस्टॉल करें और फिर इसे पुनः स्थापित करें (gem uninstall pg && gem install pg)।
ट्रॉय

4
क्या यह होमब्रे के लिए है? पोर्ट इसे करने के लिए लगता है: / ऑप्ट / स्थानीय / lib / postgresql91 तो सुनिश्चित करें कि आप निर्यात का उपयोग करें PATH = / opt / local / lib / postgresql91 / bin: $ PATH
एंटनी स्टुबैरी

1
मेरा रास्ता सही ढंग से रिपोर्ट कर रहा था, लेकिन ट्रॉय ने pg रत्न को अनइंस्टॉल करने के समाधान के बारे में बताया, फिर बंडलर को फिर से स्थापित करने की अनुमति दी।
टॉम हैरिसन

2
बस स्पष्ट करने के लिए - ऐसा लगता है जैसे आप अपने पथ को सही ढंग से सेटअप करने के लिए सबसे अच्छे हैं, फिर pg रत्न को अनइंस्टॉल / रीइंस्टॉल करें
Jamie Cook

90

आप में से जो लोग रुचि रखते हैं, उनके लिए मैंने एक साथ समाधान निकाला। मुझे जो कुछ भी जोड़ना था, सब मिला

host: localhost

मेरे पर्यावरण और सभी के लिए database.yml ग्रेवी था।


9
इसके साथ सावधान रहें: यह सेटिंग डोमेन सॉकेट से टीसीपी कनेक्शन तक पहुंच को बदल देती है। हालांकि यह संभवतः काम करता है, आप अपनी मशीन पर थोड़ा सा प्रदर्शन और उपयोग करने योग्य पोर्ट खो सकते हैं जो आपके सेटअप के आधार पर एक समस्या हो सकती है। जॉन द्वारा प्रदान किया गया समाधान सही है।
पाइलफ

3
'जेम अनइंस्टॉल पीजी' (सभी संस्करण चुनें), फिर 'बंडल' को फिर से स्थापित करने के लिए अपने जेमफाइल से पीजी संस्करण मेरे लिए काम किया।
tmadsen

धन्यवाद डेव जी, यह मेरे लिए भी काम किया। मैंने 10.7.3 अपडेट और रेक डीबी स्थापित किया है: माइग्रेट की गई शिकायत। यह तय किया।
सतीश

इसने मेरे लिए भी काम किया। हालाँकि मैंने पासवर्ड और यूज़रनेम खाली छोड़ दिया।
बेंजामिन

मुझे लगता है कि यह काम करेगा क्योंकि यह एक टीसीपी / आईपी कनेक्शन को मजबूर करता है।
duma

46

माउंटेन लायन के साथ मुझे यह बहुत समस्या थी लेकिन मेरे लिए एक ही चीज़ थी जो यह थी :

जाँच करें कि वास्तविक लक्ष्य कहाँ है:

sudo find / -name .s.PGSQL.5432

मुझे यह निर्देशिका बनाने की आवश्यकता थी:

mkdir /var/pgsql_socket/

फिर ऊपर के परिणाम से परिणाम का उपयोग करते हुए यह सिमलिंक बनाएँ:

ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

मुझे संदेह है कि माउंटेन लायन के अधिकांश लोगों के लिए आप सिर्फ डायर बना सकते हैं और सिम्लिंक कर सकते हैं और जब तक कि सिमलिंक काम नहीं करता है तब तक ऐसा करने में समय बर्बाद न करें।

PS - मेरा PostgreSQL आधिकारिक इंस्टॉलर के माध्यम से स्थापित किया गया था।


मुझे लग रहा है कि यह मेरे लिए हो सकता है लेकिन यह काम नहीं कर सकता। मुझे यह मिल रहा है: ln: / var / pgsql_socket /: ऐसी कोई फ़ाइल या निर्देशिका नहीं है
Emmanuel

क्षमा करें, मैं भूल गया कि मैं उसमें भी भाग गया। जवाब देने के लिए अतिरिक्त कदम जोड़ा।
बेन

आशीर्वाद आप बेन। अत्यधिक सराहनीय।
मैट

29

यदि समस्या पिछले पथ को बदलने पर बनी रहती है (जैसा कि यह मेरे लिए था), तो यह भी आज़माएं ...

gem pristine pg

ऐसा प्रतीत होता है कि समस्या (आंशिक रूप से) pg रत्न में ही निहित है। जब यह बनाता है, यह पता लगाता है कि डोमेन सॉकेट कहाँ होना चाहिए। यदि आप इस तथ्य के बाद डोमेन सॉकेट के स्थान को बदलते हैं तो यह प्रभावी नहीं लगता है जब तक कि आप मणि का पुनर्निर्माण न करें।


यह मेरे लिए काम कर रहा है, तब भी जब मैंने पेटीएम को ठीक किया और प्रागिन के बिना पीजी रत्न को फिर से स्थापित किया।
इलियट विंकलर

इस टिप के लिए धन्यवाद, डैरेन
भीन करता है

15

उन लोगों के लिए जिन्होंने आधिकारिक इंस्टॉलर से डायरेक्ट इंस्टॉल किया है, बस होस्ट को कमांड में जोड़ने से कोई पथ परिवर्तन नहीं होता है:

psql -h localhost -U postgres

5

मेरे पास एक ही मुद्दा था और जॉन वांग के समाधान कार्य करने में समस्याएं आ रही थीं। जैसा कि डैरेन ने उल्लेख किया है कि पीजी रत्न के साथ एक मुद्दा है। यह काम करने के लिए मुझे चाहिए:

gem uninstall pg

फिर पुनर्स्थापित करें।

जिससे यह काम कर गया।


मुझे इसे दो बार चलाना पड़ा ... विषम। मैं स्थापना रद्द करें पीजी तो बंडल स्थापित और यह विफल रहा। तो बस मणि स्थापित पी जी और यह काम किया। धन्यवाद!
डस्टिन

3

मैं इसमें भी भाग गया, लेकिन मैंने अपने आप को पोस्टग्रेज स्थापित किया था (होमब्रे के साथ नहीं)। यदि ऐसा है, तो आपको psql (जो / usr / local / bin हो सकता है, लेकिन मेरे लिए / usr / local / pgsql / bin) हो सकता है और अपने $ PATH को प्रीपेंड करने के लिए पुराना रास्ता खोजने की जरूरत है।

(पहले) which psql=> / usr / बिन / psql

(तय) निर्यात पथ = / usr / स्थानीय / psql / बिन: $ पथ

(बाद) `जो psql '=> / usr / स्थानीय / psql / बिन

जॉन वैंग ने source ~/.bash_rcबाद में कहा कि आप अपने bash_rc को सुनहरा बनाएं।


3

क्या यह होमब्रे के लिए है? पोर्ट इसे लगाने के लिए लगता है:

/opt/local/lib/postgresql91 

इसलिए सुनिश्चित करें कि आप निर्यात का उपयोग करते हैं

PATH=/opt/local/lib/postgresql91/bin:$PATH

मैक पोर्ट्स इश्यू: https://trac.macports.org/ticket/30125


1

मैं सबसे अधिक उत्तोलित उत्तर से खुश नहीं हूं क्योंकि वे या तो ओएस-उपयोगकर्ता विशिष्ट हैं या रीमेक हैं, जो डोमेन सॉकेट्स के बजाय टीसीपी का उपयोग करने के लिए पोस्टग्रेज करते हैं, जैसा कि @ पिलिफ द्वारा बताया गया है। मैंने एक और समाधान देखा है जिसमें एक कोर सिस्टम पथ से पहले ब्रू के पथ की जांच करने के लिए सिस्टम स्तर पर डिफ़ॉल्ट पथों को फिर से आदेश देना शामिल है, लेकिन यह खतरनाक लगता है क्योंकि यह इस तरह के अन्य सभी अनुप्रयोग नाम-टकरावों को प्रभावित कर सकता है।

यह साइट मेरे सहकर्मी को मिले समाधान का विवरण देती है। यह एक एकल शेल स्क्रिप्ट को निष्पादित करने के लिए नीचे आता है जो करेगा

  1. एक अलग निर्देशिका में 8.4 फाइलों को पोस्टग्रेज का बैकअप लें
  2. जगह में पोस्टग्रेज के ब्रू की स्थापना को सहानुभूति देता है

यह कैवेट के साथ आता है कि सिस्टम डिफ़ॉल्ट पोस्टग्रेज जो कुछ भी काढ़ा है, इसलिए आपको निर्णय कॉल करना होगा कि क्या यह आपके लिए सही है। मैं अपने आप को नहीं देख रहा हूँ Postgres 8.4 विशेष रूप से 9.x से अधिक है, लेकिन YMMV


1

मेरे लिए काम करने वाला एक और संभावित समाधान पोस्टमास्टर फ़ाइल को हटाकर रीसेट कर रहा है। बस चलाते हैं:

rm /usr/local/var/postgres/postmaster.pid 

यह उन त्रुटियों के लिए लॉग की जाँच करने के लायक है जो आप यहाँ पा सकते हैं:

/usr/local/var/postgres/server.log

त्रुटि संदेश मेरे पास था:

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 161) running in data directory 
"/usr/local/var/postgres"?

सब कुछ बाद में महान काम किया।


मेरे पास केवल कमांड लाइन से समस्या थी। फ़ाइल /usr/local/var/postgres/postmaster.pid को हटाने से मेरी समस्या हल हो गई।
माइकल ए।

0

मेरे मामले में सर्वर गलत साझा की गई मेमोरी सेटिंग्स के कारण शुरू नहीं हुआ। पहले मैं उलझन में था क्योंकि कई पोस्टग्रेज प्रक्रियाएं चल रही थीं, लेकिन वे मानक प्रणाली प्रक्रियाएं थीं। postmasterप्रक्रियाओं के लिए देखो !

साझा मेमोरी सेटिंग्स को बदलने के लिए मुझे बस इतना करना चाहिए था । पथ सेटिंग्स के साथ चारों ओर चक्कर लगाना मेरे मामले में आवश्यक नहीं था।


0

आपको अपने डेटाबेस के होस्ट को निर्दिष्ट करने की आवश्यकता हो सकती है।


0

यदि आप अपने $ PATH में एक स्थायी परिवर्तन पसंद करते हैं, तो यह कोशिश करें:

defaults write $HOME/.MacOSX/environment PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/local/bin"

यह आपका फिर से लिखना होगा ~/.MacOSX/environment.plist


0

मैं रेल के लिए नया हूँ, लेकिन डेटाबेस में निम्नलिखित जोड़ रहा हूँ। मेरे लिए काम किया:

host: localhost

port: 5432

निश्चित नहीं है कि टीसीपी के बजाय रेल डोमेन सॉकेट्स के लिए रेल क्यों डिफॉल्ट करता है, जबकि PostgreSQL डिफ़ॉल्ट रूप से डोमेन सॉकेट सेट नहीं करता है।


0

मेरा PostgreSQL / Library / PostgreSQL में स्थापित है ताकि मेरे लिए usr / var सामग्री काम न करे।

ऐसा प्रतीत होता है कि Woz सही है क्योंकि हर बार जब मैं अपने मैकबुक को बंद करता हूं तो प्रो का ढक्कन यह क्रैश हो जाता है ... यहां मेरे लिए पोस्ट-क्रैश काम किया गया है:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.