2011-09-10 13 views
6

psql mydb पैदावार:postgresql: मुझे psql चलाने पर स्थानीयहोस्ट निर्दिष्ट क्यों करना है?

psql: could not connect to server: Permission denied 
    Is the server running locally and accepting 
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"? 

psql -h localhost mydb बस ठीक काम करता है। pg_hba.conf इस तरह दिखता है:

local all    all          trust 
host all    all    127.0.0.1/32   trust 
host all    all    ::1/128     trust 

क्या हुआ?

उत्तर

2

शायद psql और सर्वर यूनिक्स-डोमेन सॉकेट के लिए एक अलग स्थान का उपयोग करता है। (/ var/pgsql_socket/एक अजीब स्थान है) यह तब हो सकता है जब आप विभिन्न पैकेजों से बाइनरी मिश्रण कर रहे हों। सॉकेट का पता लगाने का प्रयास करें (/ tmp/शुरू करने के लिए एक अच्छी जगह है) आप -h विकल्प का दुरुपयोग द्वारा एक अलग निर्देशिका का उपयोग करने के लिए मजबूर कर सकते हैं psql:

psql -h /tmp/ 
+0

+1, जो स्थानीय कनेक्शन के लिए भी काम करता है (शुरुआत में आगे स्लैश)। यूनिक्स-डोमेन सॉकेट का पथ ['unix_socket_directory'] द्वारा निर्धारित किया जाता है (http://www.postgresql.org/docs/current/static/runtime-config-connection.html#GUC-UNIX-SOCKET-DIRECTORY) 'postgresql में संपत्ति .conf'। –

+0

'unix_socket_directory' संपत्ति खाली हो सकती है (मैंने इसे कभी नहीं देखा है), इस मामले में यह संभावित रूप से/tmp/के लिए डिफ़ॉल्ट है। – wildplasser

+0

टिप के लिए धन्यवाद- मैं पोस्टग्रेज़ से मानक ओएस एक्स पैकेज का उपयोग कर रहा हूं, जो यूनिक्स-डोमेन सॉकेट सेटिंग बताता है। – Wells

2

यह ओएस एक्स पर मुझे क्या हुआ है, और समस्या यह थी कि /usr/bin/psql जो मैं उपयोग कर रहा था, लेकिन पोस्टमास्टर /Library/PostgreSQL/9.0 से चल रहा था। /Library/PostgreSQL/9.0/bin/psql का उपयोग करना (इसे मेरे PATH में पहले से प्राप्त करना) समस्या को हल किया गया।

1

जैसा कि अन्य उत्तरों ने अन्य विकल्पों को संबोधित किया, मुझे लगता है कि मैं मैक ओएस एक्स सर्वर शेर पर कुछ प्रदान कर सकता हूं। मैं बहुत ही समान मुद्दे में भागता हूं - मेरे मामले में भी -h localhost काम नहीं किया क्योंकि पोस्टग्रेस्क्लुएल में नेटवर्किंग अक्षम कर दी गई थी, जो कि कई मामलों में बहुत अच्छा विचार है। मैक ओएस एक्स सर्वर के साथ बात यह है कि यह launchd के माध्यम से PostgreSQL सर्वर लॉन्च करता है।

कुछ संकेत आप के चारों ओर जाने के रूप में:

  • serveradmin सेवा: postgres
  • launchd विन्यास फाइल: /System/Library/LaunchDaemons/org.postgresql.postgres.plist
  • डेटाबेस फ़ोल्डर: /var/pgsql
  • सॉकेट फ़ोल्डर: /var/pgsql_socket

कि चोर मूर्तिकला फ़ाइल कई कॉन्फ़िगरेशन निर्देशों को ओवरराइड करती है जो डेटाबेस फ़ोल्डर के अंतर्गत postgresql.conf में पाई जा सकती हैं। विशेष रूप से इन दो:

  • unix_socket_group
  • unix_socket_permissions

आप पा सकते हैं कि _postgres खाते सर्वर को चलाने के लिए प्रयोग किया जाता है और यदि सक्रिय उपयोगकर्ता _postgres समूह के सदस्य है सब कुछ भी सुलभ है।

dscl . -read /Groups/_postgres GroupMembership चलाकर आप देख सकते हैं कि डिफ़ॉल्ट है कि समूह इन सदस्य हैं द्वारा: _devicemgr_calendar_teamsserver_www

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

पूर्व को Server.app या dscl कमांड-लाइन उपयोगिता के माध्यम से किया जा सकता है। पहले विकल्प को शायद कुछ भी जोड़ने की आवश्यकता नहीं है। बस सुनिश्चित करें कि आप सिस्टम खाते देख सकते हैं (देखें -> सिस्टम खाते छुपाएं/दिखाएं)। मैं तो यह _postgres समूह के लिए अपने उपयोगकर्ता जोड़ना चाहिए CLI जंकी की तरह कर रहा हूँ:

sudo dscl . -append /Groups/_postgres GroupMembership $USER 
बेशक

करके आप अपने खाते के तहत तो चलाने क्योंकि आप के लिए आप मैक ओएस एक्स सर्वर डेटाबेस का उपयोग दे रहे हैं आपको सावधान रहना चाहिए बैक-एंड। तो या तो आपको _postgres खाता सुरक्षित करें या अपने डेटाबेस में हेरफेर करने के लिए अलग उपयोगकर्ता बनाएं या वहां कुछ भी निजी न बचाएं।

8

मेरे पास सटीक वही बात होती है, संभवतः psql के विरोधाभासी संस्करण (शेर से एक, होमब्री से एक) के कारण। जबकि मैं अभी भी यह समझने में सक्षम नहीं हूं कि psql/tmp सॉकेट निर्देशिका का उपयोग कैसे करें, मेरे पास एक काम है।

अपने .bashrc (या .zshrc, आदि) में निम्नलिखित रखो: -h ध्वज की आपूर्ति के बिना

export PGHOST=/tmp 

यह सही "मेजबान" वापस सही सॉकेट निर्देशिका करने के लिए सेट,

`-h` स्विच के लिए
संबंधित मुद्दे