PostgreSQL yerel olarak çalışıyor, ancak bağlanamıyorum. Niye ya?


32

Son zamanlarda makinemi Mac OS X Lion'dan (10.7.4) Mountain Lion'a (10.8) güncelledi ve PostgreSQL kurulumumu etkilediğini düşünüyorum. Başlangıçta Homebrew aracılığıyla kuruldu. Ben bir DBA değilim, ancak birisinin bu sorunu nasıl gidereceğimi söyleyebileceğini umuyorum.

Bağlanamıyorum (Dağ Aslanından önce).

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

Ancak Postgres hala açık bir şekilde çalışıyor:

$ 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

Yerel bir Rails uygulamasından gelen sorgulara (hem test db hem de geliştirme db) yanıt veriyor

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

/var/pgsql_socket/Dizin görünmüyor , /var/pgsql_socket/.s.PGSQL.5432yukarıda belirtilen soket dosyasının tek başına ! Belki de Dağ Aslanı kurulumu bunu sildi?

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

Bunu nasıl giderebilirim?


Bir postgres admin değil, fakat eksik bir soket dosyası doğru geliyor. / Var / pgsql_socket dizinini oluşturun (kullanıcınız yazma izinlerine sahipken) ve sunucuyu yeniden başlatın. Bakalım bu düzeldi mi
Derek Downey

SO ile ilgili soru . Görünüşe göre Apple yükseltme ile iyi bir iş yapmadı.
Erwin Brandstetter

kütük dosyasında oluşturulan bir soket dosyasından herhangi biri var /usr/local/var/postgres/server.logmı?
Philᵀᴹ

@ErwinBrandstetter Apple'ın elle yüklenen 3. parti * nix uygulamalarını yükseltmek için "iyi bir iş" yapmasını nasıl beklersiniz?
Philᵀᴹ

@ Phil- söz yok. Bunun bir yol değişkeni problemi olabileceğini düşünmeye başladım. Sanırım $PATHyükseltme ile değişti /usr/binönceden olduğunu /usr/local/binve Mountain Lion önceden yüklenmiş PostgreSQL ile gelebilir düşünüyorum!?! Soruşturma ...
Meltemi

Yanıtlar:


30

Son derece benzer bir sorun yaşadığımı, yani postgreslerin /var/pgsql_socket_althiçbir yazılımımın bakmayı beklemeyeceği bir soket açtığını , ancak sorunumun çözümünün sadece benim sorunum olmadığını söyledi $PATH.

Ben dizini oluşturmak zorunda /var/pgsql_socket, kendime chown ve seti unix_socket_directoryde postgresql.conf(yer /usr/local/var/postgres) Bu dizine, sonra kullanmak pg_ctliçinde ikili /usr/local/binolan nerede (başarıyla doğru postgres sunucusunu başlatmak için $PATHgeliyor - emin which pg_ctletmek giderir /usr/local/bin/pg_ctlher zamanki ya açıkça söyle).

Bu, /var/pgsql_socket_altsöz konusu soruyu bu soru ile bulan diğer kullanıcılara yardımcı olabilir .


İlginç. Ayrıca Dağ Aslanı'nda mısınız? PostgreSQL'i Homebrew ile birlikte kurdunuz mu? Öyleyse, yaptığım $PATHgibi değişikliklerin aksine, başka birinin bu çözümü doğrulayabildiğini merak edin .
Meltemi

Evet, evet ve umarım öyledir!
Will

@ wolftron çözümün benim için çok güçlüydü (Mountain Lion, homebrew / postgres, / var / pgsql_socket_alt, tamamı dokuz). Bu, Mountain Lion'da homebrew ile yeni bir sorun mu? İsterseniz onlarla bir bilet açacağım.

@Jie'den doğrulama aldık gibi görünüyor.
Will

Bu sorunu ve OS X 10.8.2'deki çözümü doğrulayabilirim / postgresql kurulumunu 9.2.1.
Hartwig

8

Mantıklı ve tipik bir açıklama psql, homebrew ile birlikte /usr/local/bin/psqlgelenlerin $ PATH'nizde /usr/bin/psql(OS X ile birlikte) olduğu gibi olandan farklı olduğu şeklinde olacaktır . Tam yolla denemek isteyebilirsiniz:

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

Ayrıca, pssorunuzun çıktısında alışılmadık bir şey var : postgres sunucusu bir meltemiUnix kullanıcısı altında çalışıyor , oysa genel olarak, özel postgresUnix kullanıcısı bunun için kullanılıyor.


Ayrıca, _postgreskullanıcı / grup için (alt çizgi ile) bana bilinmiyor. Bu bir eser mi yoksa beklenen mi?
Erwin Brandstetter

Evet, belirttiğiniz gibi bir $PATHsorun gibi görünüyor . /usr/local/bin/psqlVeritabanına erişmek için kullandığımda işler önceki gibi çalışır . Lion'ın PostgreSQL sistemi yoktu ya da $ PATH'im farklı bir şekilde kuruldu. En son karıştırdığımdan bu yana geçen bir yıl oldu, o yüzden tam olarak hatırlayamıyorum. Unix kullanıcısına gelince ... Homebrew PostgreSQL kurulumunda sunucu başlatılarak başlatılır ve kullanıcı varsayılan olarak onu yükleyen yerel kullanıcıya ayarlanır. PostgreSQL'i otomatik olarak başlatan Mac OS X Server'da işler farklı kuruluyor postgres.
Meltemi

4

Psql istemcisi için herhangi bir yapılandırma dosyası bilmiyorum. Ancak psql, komut satırı seçenekleriyle ilişkilendirilen birkaç ortam değişkenine saygı duyar.

Böylece psql'nin seçtiğiniz soketi otomatik olarak kullanmasını sağlamak için PGHOST değişkenini soketi içeren dizine ayarlayabilirsiniz. yani

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase

1
Herhangi bir yerde belgelenmemiş PGHOST'u soket dosyalarının bulunduğu dizine ayarlayabildiğinizi bulabilirsiniz. Ama bu aslında işe yarıyor. Teşekkürler!
Andrew Schulman

3

Deneyin:

psql -U rails -d myapp_development -h localhost

veya

psql -U rails -d myapp_development -h 127.0.0.1

3

Geç, ama bunu faydalı buldum: http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion

Bu Lion içindi, ancak 10.6.8'den Mountain Lion'a yükselttikten sonra bu konudaki sorunların aynısını yaşıyorum ve daha önce 10.6.8'de HomeBrew aracılığıyla PostgreSQL'i kurdum. Ayrıca /var/pgsql_socket_altyükseltme sonrası gizemli bir klasöre de /var/pgsql_socketsahiptim , ancak onu kaldırdım ve @wolftron tarafından önerilen şekilde oluşturdum. Ancak, bu nihai çözüm değildi.

unix_socket_directoryBoş bırakılırsam / yorumda postgresql.confbulunursam, yükseltme öncesinde var olan herhangi bir proje, soketin /var/pgsql_socketeksik olduğundan şikayet eder . Ancak eğer kendimi zorlaştırıp kodlanmış olarak değiştirirsem var/pgsql_socket, herhangi bir yeni proje soketin /tmpeksik olduğundan şikayet eder . Çok sinir bozucu ... pg gembir 10.8 öncesi projeye ( gem uninstall pg && gem install pg) yeniden yüklenip dosyada unix_socket_directoryyorum yapana kadar conf. pg_ctlSunucuyu hızlı bir şekilde yeniden başlattıktan sonra hem eski hem de yeni projeler işe yaradı. /tmpPgsql soketim şimdi yaşıyor , hayatım.

Sidenote: activerecord-postgresql-adaptergem kullanıyorsanız , önce onu kaldırın, sonra pg'yi activerecord-postgresql-adaptertekrar kurun, sonra tekrar kurun .


2

Sadece dba SE'ye yeni kaydoldum, bu nedenle ilgili gönderi hakkında yorum yapamayacak gibiyim (ne güveç!).

Ancak @thure ile aynı gemide olduğumdan eminim. Emin / usr / local / bin önceki benim PATH / usr / bin den, kabuk ile karma vardı hangi ikili ettirdiniz edildi yapmış whichve typevb

@ İle aynı semptomları gördüm. Sonra bir epiphany vardı; pgGem'i (Ruby kullanıyorum) PATH'in Mac'in path_helper'inden (/ etc / profile'den çalıştırılan ve / usr / bin'den / usr / local / bin'den önce) olumsuz etkilenen bir kabukta yeniden inşa edeceğimi fark ettim. .

Pg'yi kaldırdım ve PATH'ı doğru olan bir kabuğa yeniden yerleştirdim. Birdenbire bağlanabildim!

Bu nedenle, dilinizi insanları bağladığınızdan emin olun ve doğru kopyasını bulmalarına izin verin (muhtemelen) pg_config.



1

Gerçek yeri beklenen yere bağlamanın çok işe yaradığını buldum:

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

@thure tarafından kabul edilen cevabın hatları boyunca ama daha basit.


1

İşte 2016, El Capitan orada ve Apple sürekli değişiyor. Postgres, işletim sisteminin bir parçası olarak kurulur ve postgres config dosyası, postgresql.conf konumundaki / tmp içindeki unix_socket_directories özelliğini ayarlar. Soket /tmp/.s.PGSQL.5432 içindedir. Aşağıdakileri yürüterek sorunu çözmeyi başardım:

sudo ln -s /tmp /var/pgsql_socket

Umarım bu birine yardımcı olur.


1

Doğru soket dosyasını arayın

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

Sonuçtan dosya yolunu alın ve yolu psql komutunda "-h" parametresiyle kullanın

Örneğin, macOS Sunucu Takvimi ve Rehber veritabanına bağlanma yöntemim (sunucuya bir ssh oturumu içinde):

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

Ardından, yoldaki soket dosya bağlanmak için kullanılır.


1

Varsayılan olarak postgres, unix-domain-soketleriyle bağlanmaya çalışıyor gibi görünüyor. UNIX DOMAIN SOKET

Bu bana liman işçisi üzerinde postgres örneği çalıştırırken oldu. Sunucunuzun ne tür bir bağlantı kabul ettiğini görmek zorundasınız. Benim için açıkça TCP ve unix alan soketi değil.

Ana bilgisayarı kabul etmek için bayrak eklemek, bağlantıyı yolu düzeltmek için yeniden yönlendirdi ve sorunu düzeltti.

psql -U username -p port -h host

Not: Unix alan soketleri çekirdek seviyesinde çalışır ve bağlantının TCP bağlantıları için gerekli olan tüm caz aralarından geçmesi gerekmez. Süreçler Arası İletişimin bir parçası olarak kendi makinenize farklı bir işlemle bağlantı kurmak istediğinizde oldukça hızlı ve verimlidirler.


0

Merhaba dünya :)
Benim için en iyi ama garip yol bir sonraki şeyleri yapmaktı.

1) postgres93.app dosyasını veya başka bir sürümü indirin . Bu uygulamayı / Uygulamalar / klasöre ekleyin.

2) Dosyaya bir satır (komut ) ekleyin ( .bash_profileev dizinimdeki):

ihracat PATH = / Uygulamalar / Postgres93.app / İçindekiler / MacOS / bin /: $ PATH
Bu bir PATH var psqldan Postgres93.app. Konsol her başlatıldığında satır (komut) çalışır.

3) Başlatma Postgres93.appgelen /Applications/klasörü. Yerel bir sunucu başlatır (bağlantı noktası "5432" ve ana bilgisayar "localhost").

4) Bütün bu manipülasyonlardan sonra koşmaktan $ createuser -SRDP user_nameve diğer komutlardan ve çalışmaktan memnunum ! Postgres93.appSisteminiz her başladığında çalışacak şekilde yapılabilir.

5) Ayrıca veritabanlarınızı grafiksel olarak görmek istiyorsanız yüklemelisiniz PG Commander.app. Postgres DB'nizi güzel veri tabloları olarak görmenin iyi bir yolu

Tabii ki, sadece yerel sunucu için yararlıdır. Bu talimatın bu sorunla karşılaşan başkalarına yardımcı olması beni mutlu edecektir.



0

Bu aynı hatayı psqlkomut satırından çalıştırmaya çalışırken de aldım . Benim çözümümün çok daha basit olduğu ortaya çıktı. Yapılandırma dosyasındaki dinleme portunu yanlış yapılandırdım: /etc/postgresql/9.4/main/postgres.conf . Bağlantı noktasını 5432 numaralı bağlantı noktasından bağlantı noktası = 5433'e değiştirdim. Yeniden 5432'ye değiştirdiğimde beklendiği gibi çalıştı.

Benzer bir şey yapıp yapmadığınızı test etmek için, çalıştırabilirsiniz $ psql -p5433 psql komutu için burada bulabileceğiniz birçok yararlı seçenek vardır: http://www.postgresql.org/docs/9.4/static/app-psql .html böylece KENDİ'nizi belirli bir yanlış yapılandırma ile test edebilirsiniz. Elbette, son yapılandırma değişiklik kümenizi de * .conf dosyalarından kaldırabilir ve sorunun kaynağının bu olup olmadığını test edebilirsiniz. Dosya izinleri ve mülkiyeti ile uğraşmadan önce kesinlikle kontrol etmeye değer olduğunu düşünüyorum. (Sadece unutma /etc/init.d/postgresql restart)

Bulamadığım şey psql CLI komutu için varsayılan değerleri ayarlayan config dosyasıydı. Birisi onunla yorum yapabilir mi, lütfen?

Benim için her zaman ilk programlama ilkeme geri dönüyorum: "Genellikle herhangi bir hatanın kaynağıyım!"

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.