PostgreSQL स्थानीय रूप से चल रहा है लेकिन मैं कनेक्ट नहीं कर सकता। क्यूं कर?


32

हाल ही में मैक ओएस एक्स लायन (10.7.4) से माउंटेन लायन (10.8) तक मेरी मशीन को अपडेट किया गया और मुझे लगता है कि इसने मेरी पोस्टग्रेक्यूएल इंस्टॉलेशन को बोर कर दिया। यह मूल रूप से Homebrew के माध्यम से स्थापित किया गया था। मैं एक डीबीए नहीं हूं, लेकिन उम्मीद है कि कोई मुझे बता सकता है कि यह कैसे समस्या निवारण कर सकता है।

मैं कनेक्ट करने में असमर्थ हूं (लेकिन माउंटेन शेर से पहले सक्षम था):

$ psql -U rails -d myapp_development
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

लेकिन Postgres अभी भी स्पष्ट रूप से चल रहा है:

$ ps aux | grep postgres
meltemi          2010   0.0  0.0  2444124   5292   ??  Ss   Wed01PM   0:00.02 postgres: rails myapp_development [local] idle    
meltemi           562   0.0  0.0  2439312    592   ??  Ss   Wed12PM   0:02.28 postgres: stats collector process       
meltemi           561   0.0  0.0  2443228   1832   ??  Ss   Wed12PM   0:01.57 postgres: autovacuum launcher process       
meltemi           560   0.0  0.0  2443096    596   ??  Ss   Wed12PM   0:02.89 postgres: wal writer process       
meltemi           559   0.0  0.0  2443096   1072   ??  Ss   Wed12PM   0:04.01 postgres: writer process       
meltemi           466   0.0  0.0  2443096   3728   ??  S    Wed12PM   0:00.85 /usr/local/bin/postgres -D /usr/local/varpostgres -r /usr/local/var/postgres/server.log

और यह एक स्थानीय रेल एप्लिकेशन से प्रश्नों का जवाब दे रहा है (टेस्ट डीबी और डेवलपमेंट डीबी दोनों)

  User Load (0.2ms)  SELECT "users".* FROM "users" 
  Rendered users/index.html.haml within layouts/application (1.3ms)

कोई /var/pgsql_socket/निर्देशिका प्रतीत नहीं होती है , /var/pgsql_socket/.s.PGSQL.5432ऊपर बताई गई सॉकेट फ़ाइल को अकेले रहने दें ! हो सकता है कि माउंटेन लायन की स्थापना ने उसे मिटा दिया हो?

$ ls -l /var/ | grep pg
drwxr-x---   2 _postgres  _postgres    68 Jun 20 16:39 pgsql_socket_alt

मैं इसका निवारण कैसे कर सकता हूं?


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

इतने पर संबंधित प्रश्न । लगता है जैसे Apple ने अपग्रेड के साथ एक अच्छा काम नहीं किया।
एरविन ब्रान्डस्टेट्टर

क्या लॉग फ़ाइल में सॉकेट फ़ाइल बनाने का कोई उल्लेख है /usr/local/var/postgres/server.log?
फिलु

@ErwinBrandstetter ऐप्पल आपसे कैसे उम्मीद करता है कि मैन्युअल रूप से इंस्टॉल किए गए 3 पार्टी * निक्स ऐप को अपग्रेड करने का "अच्छा काम" करेगा?
फिलु

@ फिल- कोई उल्लेख नहीं। मुझे लगता है कि यह एक पथ परिवर्तनक समस्या हो सकती है। मुझे लगता है कि मेरा $PATHअपग्रेड अपग्रेड के साथ बदल गया /usr/binहै /usr/local/binऔर मुझे लगता है कि माउंटेन लायन पोस्टग्रेएसक्यूएल के साथ आ सकता है! जांच ...
Meltemi

जवाबों:


30

मैंने पाया कि मुझे एक समान समस्या थी, अर्थात् पोस्टग्रेट्स एक सॉकेट खोल रहा था /var/pgsql_socket_altजिसमें मेरा कोई भी सॉफ़्टवेयर देखने की उम्मीद नहीं करता था, लेकिन मेरी समस्या का समाधान केवल मेरे साथ समस्या नहीं थी $PATH

मुझे डायरेक्टरी बनानी थी /var/pgsql_socket, उसे खुद को चेंज करना था, और उस डायरेक्टरी unix_socket_directoryमें postgresql.conf( इन में स्थित /usr/local/var/postgres) सेट करना था , फिर pg_ctlबाइनरी का उपयोग /usr/local/binकरके सही पोस्टग्रेज सर्वर को सफलतापूर्वक शुरू करने के लिए (जो कि जहां $PATHआता है - सुनिश्चित करें कि या तो हमेशा which pg_ctlहल /usr/local/bin/pg_ctlहोता है) इसे स्पष्ट रूप से कहें)।

यह उन अन्य उपयोगकर्ताओं की मदद कर सकता है जो /var/pgsql_socket_altउल्लेख के माध्यम से इस प्रश्न को पाते हैं ।


दिलचस्प। क्या आप भी माउंटेन लायन पर हैं? क्या आपने Homebrew के साथ PostgreSQL स्थापित किया है? यदि हां, तो आश्चर्य है कि क्या कोई और इस समाधान को सत्यापित कर सकता है जैसा $PATHकि मैंने किया है।
मुल्तेमी

हाँ, हाँ, और मुझे उम्मीद है!
विल

@wolftron आपका समाधान मेरे लिए धमाकेदार था (माउंटेन लायन, होमब्रे / पोस्टग्रेज, / var / pgsql_socket_alt, पूरे नौ)। क्या यह होमब्रे के साथ माउंटेन लायन पर एक नया मुद्दा है? यदि आप ऐसा सोचते हैं तो मैं उनके साथ एक टिकट खोलूंगा।

ऐसा लगता है कि हमने @Jamie से सत्यापन प्राप्त कर लिया है।
विल

मैं इस समस्या और OS X 10.8.2 पर समाधान की पुष्टि कर सकता / सकती हूं।
हार्टविग

8

एक प्रशंसनीय और विशिष्ट व्याख्या यह होगी कि psqlहोमब्रेव के साथ आने वाला वह है, /usr/local/bin/psqlजो आपके $ पीएटीएच में भिन्न होगा, जैसे /usr/bin/psql(ओएस एक्स के साथ बंडल)। आप पूर्ण पथ के साथ प्रयास करना चाहते हैं:

$ /usr/local/bin/psql -U rails -d myapp_development

इसके अलावा, psआपके प्रश्न के आउटपुट में कुछ असामान्य है : पोस्टग्रेज सर्वर एक meltemiयूनिक्स उपयोगकर्ता के तहत चल रहा है , जबकि आम तौर पर, इसके लिए समर्पित postgresयूनिक्स उपयोगकर्ता का उपयोग किया जाता है।


इसके अलावा, _postgresउपयोगकर्ता / समूह के लिए (अंडरस्कोर के साथ) मेरे लिए अज्ञात हैं। क्या वह एक कलाकृति है या अपेक्षित है?
इरविन ब्रान्डेसटेटर

हां, यह एक $PATHसमस्या प्रतीत होती है जैसा कि आपने बताया। जब मैं /usr/local/bin/psqlडेटाबेस का उपयोग करने के लिए उपयोग करता हूं तो चीजें पहले की तरह काम करती हैं। या तो शेर के पास एक सिस्टम PostgreSQL नहीं था या मेरा $ PATH अलग तरीके से स्थापित किया गया था। यह एक साल हो गया है क्योंकि मैंने आखिरी बार इस से छेड़छाड़ की है, इसलिए मुझे ठीक से याद नहीं है। यूनिक्स उपयोगकर्ता के लिए के रूप में ... PostgreSQL के होमब्रेव इंस्टॉल के साथ सर्वर को लॉन्च करके लॉन्च किया जाता है और उपयोगकर्ता को डिफ़ॉल्ट के रूप में स्थापित करने वाले स्थानीय उपयोगकर्ता के लिए सेट किया जाता है। चीजें मैक ओएस एक्स सर्वर पर अलग तरीके से स्थापित की जाती हैं जो पोस्टग्रेक्यूएल को स्वचालित रूप से शुरू करता है postgres
मुल्तेमी

4

मैं psql क्लाइंट के लिए किसी भी कॉन्फिगर फाइल के बारे में नहीं जानता। हालाँकि psql कई पर्यावरण चर का सम्मान करता है जो कि कमांड लाइन विकल्पों के लिए सहसंबंधित हैं।

तो psql को स्वचालित रूप से अपनी पसंद के सॉकेट का उपयोग करने के लिए आप PGHOST चर को सॉकेट वाली निर्देशिका में सेट कर सकते हैं। अर्थात

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase

1
यह कहीं भी प्रलेखित नहीं है मैं पा सकता हूं कि आप पीजीएचएसटी को उस निर्देशिका में सेट कर सकते हैं जहां सॉकेट फाइलें रहती हैं। लेकिन यह वास्तव में काम करता है। धन्यवाद!
एंड्रयू Schulman


3

देर से, लेकिन मुझे यह मददगार लगा: http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion

यह लायन के लिए था, लेकिन मैं 10.6.8 से माउंटेन लायन में अपग्रेड होने के बाद इस धागे में एक ही मुद्दे के रूप में था और 10.6.8 पर जबकि होमब्रीयर से पहले PostgreSQL स्थापित किया था। मेरे पास रहस्यमय /var/pgsql_socket_altफ़ोल्डर पोस्ट-अपग्रेड भी था , लेकिन मैंने इसे हटा दिया और /var/pgsql_socket@wolftron द्वारा सुझाए अनुसार बनाया। हालाँकि, यह अंतिम समाधान नहीं था।

अगर मैं unix_socket_directoryखाली छोड़ देता / टिप्पणी करता postgresql.conf, तो नवीनीकरण से पहले मौजूद कोई भी परियोजना शिकायत करती कि सॉकेट /var/pgsql_socketगायब था। लेकिन अगर मैंने आत्मविश्वास और हार्ड-कोड को बदल दिया var/pgsql_socket, तो कोई भी नई परियोजना शिकायत करेगी कि सॉकेट /tmpगायब था। बहुत निराशा होती है ... जब तक मैं pg gemएक पूर्व 10.8 परियोजना ( gem uninstall pg && gem install pg) में फिर से स्थापित नहीं किया और फ़ाइल unix_socket_directoryमें टिप्पणी नहीं दी conf। एक त्वरित करने के बाद pg_ctlसर्वर को पुनः आरंभ करने, दोनों नए और पुराने परियोजनाओं में काम किया। मेरा pgsql सॉकेट /tmpअब रहता है , fwiw।

सिडेनोट: यदि आप activerecord-postgresql-adapterमणि का उपयोग कर रहे हैं , तो पहले इसे अनइंस्टॉल करें, फिर पीजी इंस्टॉल activerecord-postgresql-adapterकरें , फिर दोबारा इंस्टॉल करें।


2

मैंने केवल dba SE पर साइन अप किया है, इसलिए संबंधित पोस्ट (एक क्रॉक) पर टिप्पणी करने में सक्षम नहीं लगता।

हालाँकि, मुझे विश्वास था कि मैं @thure जैसी ही नाव में था। मुझे यकीन है कि / usr / लोकल / बिन पहले मेरे PATH में / usr / bin से था, ने जाँच की थी कि किन बायनेरिज़ के साथ शेल हैशेड whichऔर type, आदि।

मैंने @thure के समान लक्षण देखे। तब मुझे एक एपिफनी हुई; मुझे एहसास हुआ कि मैं pgएक ऐसे खोल में रत्न (मैं रूबी का उपयोग कर रहा हूं) का पुनर्निर्माण करूंगा, जिसका पैट मैक के path_helper (जो / से / प्रोफ़ाइल से चलाया जाता है / usr / बिन से पहले / usr / लोकल / बिन) पर प्रतिकूल प्रभाव डालता है। ।

मैंने pg को अनइंस्टॉल किया और इसे एक शेल में पुनः इंस्टॉल किया, जिसका PATH सही था। अचानक मैं कनेक्ट कर सकता था!

इसलिए सुनिश्चित करें कि आप अपनी भाषा को लोगों को बाँधने के लिए तैयार कर रहे हैं, और उन्हें (संभवतः) की सही प्रति ढूंढने दें pg_config



1

मैंने पाया कि अपेक्षित स्थान पर वास्तविक स्थान से सहानुभूति रखना ठीक काम किया:

sudo ln -s /var/pgsql_socket_alt /var/pgsql_socket

@thure द्वारा स्वीकृत उत्तर की तर्ज पर सरल लेकिन।


1

यहाँ यह 2016 है, एल कैपिटन वहाँ से बाहर है, और एप्पल चीजों को बदलता रहता है। Postgres OS के भाग के रूप में स्थापित है, और postgres config फाइल postgresql.conf / tmp में unix_socket_directories संपत्ति सेट करती है। सॉकेट /tmp/.s.PGSQL.5432 में है। मैं निम्नलिखित को निष्पादित करके समस्या को हल करने में सक्षम था:

sudo ln -s /tmp /var/pgsql_socket

आशा है कि यह किसी की मदद करता है।


1

सही सॉकेट फ़ाइल के लिए देखें

find / -name .s.PGSQL.5432 -ls

परिणाम से फ़ाइल के लिए पथ प्राप्त करें और psql कमांड के भीतर "-h" पैरामीटर के साथ पथ का उपयोग करें

उदाहरण के लिए, यह वह तरीका है जो मैं macOS सर्वर कैलेंडर और संपर्क डेटाबेस से कनेक्ट करता हूं (सर्वर के लिए ssh सत्र के भीतर):

sudo psql -U _calendar -h /private/var/run/caldavd/PostgresSocket/ -d caldav

फिर, कनेक्ट करने के लिए पथ पर सॉकेट फ़ाइल का उपयोग किया जाएगा।


1

डिफ़ॉल्ट रूप से पोस्टग्रेक्स यूनिक्स-डोमेन-सॉकेट्स के माध्यम से जुड़ने की कोशिश कर रहा है। UNIX DOMAIN SOCKET

यह मेरे साथ तब हुआ जब मैं डॉकटर पर पोस्टग्रेज इंस्टेंस चला रहा था। आपको यह देखना होगा कि आपका सर्वर किस तरह का कनेक्शन स्वीकार कर रहा है। मेरे लिए यह स्पष्ट रूप से टीसीपी था न कि डोमेन सॉकेट।

होस्ट को स्वीकार करने के लिए ध्वज को जोड़ने से सही पथ के कनेक्शन को पुनर्निर्देशित किया गया और समस्या को ठीक किया गया।

psql -U username -p port -h host

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


0

नमस्कार दुनिया :)
मेरे लिए सबसे अच्छा लेकिन अजीब तरीका था अगली बातें करना।

1) Postgres93.app या अन्य संस्करण डाउनलोड करें । इस एप्लिकेशन को / एप्लिकेशन / फ़ोल्डर में जोड़ें।

2) फ़ाइल में एक पंक्ति (कमांड ) जोड़ें .bash_profile(जो मेरे होम डायरेक्टरी में है):

निर्यात पथ = / अनुप्रयोग / Postgres93.app / सामग्री / MacOS / बिन /: $ पथ
यह एक पथ से psqlहै Postgres93.app। हर बार कंसोल शुरू होने पर पंक्ति (कमांड) चलती है।

3) फ़ोल्डर Postgres93.appसे लॉन्च करें /Applications/। यह एक स्थानीय सर्वर शुरू करता है (पोर्ट "5432" है और होस्ट "लोकलहोस्ट" है)।

4) इस सारी जोड़तोड़ के बाद मुझे चलाने $ createuser -SRDP user_nameऔर अन्य आदेशों को देखने में खुशी हुई और यह देखने के लिए कि यह काम करता है! Postgres93.appआपके सिस्टम के शुरू होने पर हर बार चलाने के लिए बनाया जा सकता है।

5) इसके अलावा अगर आप अपने डेटाबेस को ग्राफिक रूप से देखना चाहते हैं तो आपको इंस्टॉल करना चाहिए PG Commander.app। यह आपके पोस्ट DB को सुंदर डेटा-टेबल के रूप में देखने का अच्छा तरीका है

बेशक, यह केवल स्थानीय सर्वर के लिए उपयोगी है। मुझे खुशी होगी अगर यह निर्देश दूसरों की मदद करेगा जिन्होंने इस समस्या का सामना किया है।



0

psqlकमांड लाइन पर चलने की कोशिश करने से मुझे यही त्रुटि मिली । यह पता चला कि मेरा समाधान बहुत सरल था। मैंने कॉन्फ़िगर फ़ाइल में सुनने के पोर्ट को गलत तरीके से कॉन्फ़िगर किया था: /etc/postgresql/9.4/main/postgres.conf । मैंने पोर्ट को पोर्ट = 5432 से पोर्ट = 5433 में बदल दिया था। जब मैंने इसे वापस 5432 में बदल दिया, तो यह उम्मीद के मुताबिक काम किया।

परीक्षण करने के लिए यदि आपने कुछ ऐसा ही किया है, तो आप चला $ psql -p5433 सकते हैं। psql कमांड के लिए इस तरह के कई उपयोगी विकल्प हैं जो आप यहां पा सकते हैं: http://www.postgresql.org/docs/9.4/static/app-psql । html ताकि आप अपने स्वयं के विशेष ग़लतफ़हमी का परीक्षण कर सकें। बेशक, आप अपने .conf फ़ाइलों से विन्यास परिवर्तनों के अपने अंतिम सेट को निकाल सकते हैं, यह जांचने के लिए कि क्या वे आपकी समस्या का स्रोत हैं। मुझे लगता है कि फ़ाइल अनुमतियों और मालिकों के साथ मेल खाने से पहले यह निश्चित रूप से जांचने योग्य है। (बस मत भूलना /etc/init.d/postgresql restart)

मुझे जो नहीं मिल सका वह था config फाइल जो psql CLI कमांड के लिए डिफॉल्ट मान सेट करता है। किसी के साथ टिप्पणी कर सकते हैं, कृपया?

मेरे लिए मैं हमेशा प्रोग्रामिंग के अपने पहले सिद्धांत पर वापस जाता हूं: "मैं आमतौर पर किसी भी त्रुटि का स्रोत हूं!"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.