OSX 10.7 Lion'a yükselttikten sonra Postgresql'i onarma


196

Geçenlerde OSX 10.7'ye yükselttim, bu noktada ray kurulumum psql sunucusuna bağlanmaya çalışırken tamamen doluydu. Komut satırından şunu kullanarak

psql -U postgres

tamamen iyi çalışıyor, ancak rails sunucusunu veya konsolu aynı kullanıcı adı ve şifreyle çalıştırmaya çalıştığımda, bu hatayı alıyorum

...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"?

Neler olabileceğine dair herhangi bir fikir süper yardımcı olacaktır! Teşekkürler!


Bu da ofisimdeki birine çarptı; Yanlış ikili alma konusunda benzer bir sorun yaşadık, farklı izinlere sahip farklı bir dizindeki etki alanı soketlerine bağlanmaya çalışırken ek bir sorun vardı ve yükseltme yerel veritabanındaki tüm verileri yedi gibi görünüyor. Neyse ki bu sadece bir geliştirme kutusu, bu yüzden büyük bir anlaşma değil, hafif iğrenç. :)

1
Bunu bugün kendime vurdum ve dün sorunuzu okuduğumu hatırladım. @John Wang çıktı ve açıkladı :)
Ryan Bigg

Yanıtlar:


291

Bu bir PATH sorunu. Mac OSX Lion şimdi sisteme Postgresql içeriyor. Eğer bir yaparsanız which psqlbüyük olasılıkla göreceksiniz usr/bin/psqlyerine usr/local/bin/psqlhangi Homebrew en doğru olandır. Çalıştırırsanız , PATH env değişkeninizin başına brew doctoreklemeniz gerektiğini belirten bir mesaj almalısınız usr/local/bin.

.Bash_profile veya .profile öğenizi veya hangi kabuğu kullandığınız ve eklediğiniz kabuğu düzenleyin: export PATH=/usr/local/bin:$PATH

sonra ilk ihracat olarak PATHya oturum oturum çıkmak ya da kaynak dosya source ~/.bash_profileve şimdi tekrar Tamam olmalıdır.


12
Bu sorunu düzeltti. Ayrıca / etc / path'larını düzenleyebilir ve / usr / local / bin öğesinin üstte olduğundan emin olabilirsiniz
Greg

153
Ayrıca, yolunuzu düzeltmeden ÖNCE pg gem'i yüklediyseniz, yanlış psql kullanacağını unutmayın. Eğer öyleyse, pg gem'i kaldırın ve tekrar kurun (gem kaldırma pg && gem install pg).
Troy

4
Bu homebrew için mi? Bağlantı noktaları bunu koyuyor gibi görünüyor: / opt / local / lib / postgresql91 Dışa aktarma PATH = / opt / local / lib / postgresql91 / bin: $ PATH
Antony Stubbs

1
Yolum doğru bir şekilde rapor ediyordu, ama Troy'un pg gem'i kaldırma çözümü, daha sonra paketleyicinin yeniden yüklenmesine izin vermek benim için hile yaptı.
Tom Harrison

2
Açıklığa kavuşturmak için - yolunuzu doğru bir şekilde ayarlamak için en iyisisiniz, sonra pg gem'i kaldırın / yeniden yükleyin
Jamie Cook

90

İlgilenenler için çözümü bir araya getirdim. İhtiyacım olan tek şey

host: localhost

benim ortam için database.yml ve tüm sos oldu.


9
bu konuda dikkatli olun: Bu ayar, etki alanı soketinden TCP bağlantısına erişimi değiştirir. Muhtemelen çalışıyor olsa da, kurulumunuza bağlı olarak bir sorun olabilecek, makinenizde biraz performans ve kullanılabilir bağlantı noktalarını kaybedebilirsiniz. John tarafından sağlanan çözüm doğrudur.
pilif

3
'gem uninstall pg' (tüm sürümleri seçin), ardından Gemfile'ınızdan pg sürümünü yüklemek için tekrar 'bundle' benim için çalıştı.
tmadsen

Teşekkürler Dave G, bu da benim için çalıştı. 10.7.3 güncellemesi yükledim ve db: rake şikayet ettim. Bu sorunu düzeltti.
Sathish

Bu benim için de işe yaradı. Ancak şifreyi ve kullanıcı adını boş bıraktım.
Benjamin

TCP / IP bağlantısını zorladığı için bunun işe yarayacağını hayal ediyorum.
duma

46

Mountain Lion ile bu çok sorun vardı ama benim için çalışan tek şey bu düzeltme oldu :

Gerçek hedefin nerede olduğunu kontrol edin:

sudo find / -name .s.PGSQL.5432

Bu dizini oluşturmak için gerekli:

mkdir /var/pgsql_socket/

Daha sonra yukarıdaki bulgudan elde edilen sonucu kullanarak bu sembolik bağlantıyı oluşturun:

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

Ben Mountain Lion çoğu insan için sadece dir oluşturmak ve symlink yapabilir ve symlink işe yaramazsa bulmak yaparken zaman kaybetmeyin şüpheli.

PS - PostgreSQL'im resmi yükleyici aracılığıyla kuruldu.


Benim için olabileceğini hissediyorum ama işe yaramaz. Bunu alıyorum: ln: / var / pgsql_socket /: Böyle bir dosya veya dizin yok
Emmanuel

Üzgünüm, ben de bununla karşılaştığımı unuttum. Cevaplamak için ekstra adım eklendi.
Ben

Seni korusun Ben. Oldukça memnun olarak.
Matt

29

Sorun yolu değiştirmeye devam ederse (benim için olduğu gibi), bunu da deneyin ...

gem pristine pg

Sorunun (kısmen) pg gem'in kendisinde yattığı görülmektedir. Oluşturulduğunda, etki alanı soketinin nerede olması gerektiğini bulur. Etki alanı soketinin yerini değiştirdikten sonra gem'i yeniden oluşturana kadar etkili olmuyor gibi görünüyor.


PATH'ı düzelttikten ve pg gemini bozulmadan yeniden yükledikten sonra bile bu benim için çalıştı.
Elliot Winkler

Bu ipucu için teşekkürler, Darren
bhinks

15

Doğrudan resmi yükleyiciden yükleyenler için, sadece ana bilgisayarı komuta eklemek, yol değişikliği olmadan çalışır:

psql -h localhost -U postgres

5

Aynı sorunu yaşadım ve John Wang'ın çözümünün çalışmasında sorun yaşıyordum. Darren'ın belirttiği gibi pg gem ile ilgili bir sorun var. Çalışması için şunları yapmam gerekiyordu:

gem uninstall pg

Ardından yeniden yükleyin.

Hangi işe yaradı.


Bunu iki kez ... garip. PG'yi kaldırdım, sonra paket yükledim ve başarısız oldu. Sonra sadece mücevher yüklemek pg ve işe yaradı. Teşekkürler!
Dustin

3

Ben de bununla karşılaştım, ama postgres'i kendim kurdum (homebrew ile değil). Bu durumda, psql (/ usr / local / bin olabilir) için eski yolu bulmanız gerekir, ancak benim için / usr / local / pgsql / bin idi ve bunu $ PATH değerinize ekleyin.

(önce) which psql=> / usr / bin / psql

(düzeltme) dışa aktarma PATH = / usr / local / psql / bin: $ PATH

(sonra) `hangi psql '=> / usr / local / psql / bin

John Wang'ın source ~/.bash_rcdaha sonra bash_rc'nize eklemeniz önerisi altındır.



1

En çok oylanan cevaplardan memnun değilim, çünkü onlar OS kullanıcısına özgüdür veya @pilif tarafından işaret edildiği gibi etki alanı soketleri yerine TCP kullanmak için Postgres'i yeniden eşleştiriyorum. Brew'in yolunu bir çekirdek sistem yolundan önce kontrol etmek için sistem düzeyinde varsayılan yolları yeniden sipariş etmeyi içeren başka bir çözüm gördüm, ancak bu, bunun gibi diğer tüm uygulama adı-çarpışmalarını etkileyebileceğinden tehlikeli görünüyor.

Bu site iş arkadaşımın bulduğu bir çözümü detaylandırıyor. Tek bir kabuk betiği çalıştırmaya geliyor

  1. Postgres 8.4 dosyalarını ayrı bir dizinde yedekleyin
  2. demlemek yerine Postgres kurulum symlink

Bu, sistem varsayılan Postgres'in demlemenin kurduğu şey olduğu uyarısı ile birlikte gelir, bu yüzden bunun sizin için doğru olup olmadığı konusunda bir karar vermeniz gerekir. Kendimi özellikle 9.x üzerinde Postgres 8.4'e ihtiyaç duymuyorum, ama YMMV


1

Benim için çalışan bir başka olası çözüm, postmaster dosyasını silerek sıfırlamaktır. Basitçe çalıştırın:

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

Günlüğü burada bulabileceğiniz hatalar için kontrol etmeye değer:

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

Sahip olduğum hata mesajı:

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

Sonrasında her şey harika çalıştı.


Sorunu yalnızca komut satırından aldım. /Usr/local/var/postgres/postmaster.pid dosyasını kaldırmak sorunumu çözdü.
Michael

0

Benim durumumda, sunucu yanlış paylaşılan bellek ayarları nedeniyle başlamadı. İlk başta kafam karıştı çünkü birkaç postgres süreci vardı, ancak bunlar standart sistem süreçleriydi. postmasterSüreçleri arayın !

Tek yapmam gereken paylaşılan bellek ayarlarını değiştirmekti . Benim durumumda yol ayarlarıyla uğraşmak gerekmiyordu.



0

$ PATH'nizde kalıcı bir değişiklik istiyorsanız bunu deneyin:

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

bu yeniden yazacaktır ~/.MacOSX/environment.plist.


0

Rails için yeniyim, ama database.yml için aşağıdakileri eklemek benim için çalıştı:

host: localhost

port: 5432

PostgreSQL varsayılan olarak etki alanı soketlerini kurmazken, Rails'in neden TCP yerine etki alanı soketlerine varsayılan olduğundan emin değilim.


0

PostgreSQL'im / Library / PostgreSQL içine kurulur, böylece / usr / var stuff benim için çalışmaz.

Woz doğru görünüyor çünkü macbook pro'mun kapağını her kapattığımda çöküyor ... İşte benim için çökme sonrası işe yarayan şey:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.