PostgreSQL hatası 'Sunucuya bağlanılamadı: Böyle bir dosya veya dizin yok'


136

Bazıları gibi ben komisyon benim db: migrate benim projede çalıştırmak, hatta benim Ruby on Rails 3.2 uygulamaları için çoğu veritabanı görevleri denemek bu hatayı alıyorum .

PGError (sunucuya bağlanılamadı: Böyle bir dosya veya dizin yok. Sunucu yerel olarak çalışıyor ve "/tmp/.s.PGSQL.5432" Unix etki alanı soketindeki bağlantıları kabul ediyor mu?

PostgreSQL'i Homebrew ile uzun zaman önce kurdum ve MongoDB kurulumunu denedikten sonra son zamanlarda PostgreSQL kurulumum hiç aynı olmadı. OS Xv10.6 Snow Leopard kullanıyorum.

Sorun nedir ve PostgreSQL'in Mac'imde nasıl kurulacağını ve ayarlanması gerektiğini nasıl daha iyi anlayabilirim?

Şimdiye kadar (sanırım) bu bana PostgreSQL'in çalışmadığını (?) Söylüyor.

ps -aef|grep postgres                                                                                                   (ruby-1.9.2-p320@jct-ana) (develop) 
  501 17604 11329   0   0:00.00 ttys001    0:00.00 grep postgres

Ama bu bana PostgreSQL'in çalıştığını mı söylüyor?

 launchctl load -w /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist                                                        (ruby-1.9.2-p136) 
homebrew.mxcl.postgresql: Already loaded

Bunu nasıl düzeltirim? ne görmüyorum?

PS: ~/Library/LaunchAgentsiki PostgreSQL .plist dosyası içerir. Bunun alakalı olup olmadığından emin değilim.

org.postgresql.postgres.plist
homebrew.mxcl.postgresql.plist

Aşağıdakileri denedim ve aşağıdaki gibi bir sonuç aldım.

$ psql -p 5432 -h yerel ev sahibi

psql: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (fe80::1) and accepting
    TCP/IP connections on port 5432?

OS X'in kendi PostgreSQL sürümünü yüklediği ve Homebrew'un farklı bir yere farklı bir sürüm yüklediği ve PostgreSQL komutları / tmp / dizinine baktığı için bu gerçekleştiğinden beri okudum. Stack Overflow üzerinde daha fazla arama yapmanız gerekecek, ancak temel olarak PostgreSQL'i işaretliyorsunuz, böylece bu tmp yoluna bakan herhangi bir şey gerçek yolu buluyorsa, mantıklıysa.

Bu, denemek için birkaç şey bulduğum, özellikle yukarıdaki gibi symlink'i yapan bağlantı , Mac OSX Lion Postgres /tmp/.s.PGSQL.5432'deki bağlantıları kabul etmiyor . Yine de birisinin OS X'e PostgreSQL'i kurmanın arkasındaki kavramların iyi bir açıklamasını ve neden bu kadar zor olduğunu bir araya getirmesini diliyorum.

Sorun gidermeye yardımcı olacak en son bilgiler:

$ which psql // This tells you which PostgreSQL you are using when you run $ psql. 

O zaman koş:

$ echo $PATH

Dikkate alınması gereken anahtar şey şudur:

Çalıştırmak istediğiniz PostgreSQL kopyası için yol girişinin, OS X sisteminin PostgreSQL yolundan ÖNCE GELDİĞİNDEN emin olun.

Bu, hangi PostgreSQL'in çalışacağına karar veren temel bir gerekliliktir ve söylendiğim şey bu sorunların çoğuna yol açıyor.


Bunun için bir çözüm buldunuz mu? Birini işaretlemediğini görüyorum. Bunların hiçbiri bana yardım etmiyor.
Andras Gyomrey

Hala çalışmak için çoğunlukla vodoo ve garip enkarnasyonlar. Daha fazla öneri ve düzenleme yorumuma göre symlink'in nasıl yapılacağını içeren bir bağlantıyla yukarıdaki [Düzenle 2] 'yi ekledim. Symlink sonunda benim için çalıştı ama sanırım ben de postgres ve homebrew yol boyunca kaldırıldı ve yeniden, fark tam olarak ne yaptığını bilmek çok zor. İyi şanslar. Yeni bir şey keşfederseniz rapor edin, bu soruyla ilgili 15.000 görüşle bu, birçok insanın acı çekmesine neden oluyor!
Evolve

@AndrasGyomrey Avustralya'da RailsCamp15'ten yeni döndüm ve insanlar bir anahtarın yol dosyanızı doğru yapmak olduğunu söyledi, bunu açıklamak için yukarıdaki Edit 3'te düzenledim.
Evolve

Launchctl'un yüklenen bir şeyi bildirmesinin mutlaka çalışır durumda olduğu anlamına gelmediğini unutmayın. Alternatif olarak bigsql.com'a bir göz atmalısınız ; Mac üzerinde çalışır ve iyi bir yönetim arayüzüne sahiptir.
Jim Nasby

Yanıtlar:


102

Postgres dizininizde postmaster.pid olmadığını kontrol edin, muhtemelen /usr/local/var/postgres/

bunu kaldırın ve sunucuyu başlatın.

Kontrol edin - https://github.com/mperham/lunchy , launchctl için harika bir pakettir.


3
Bu benim için çalıştı. Sadece yosemite'i yeni kurdum ve homebrew'dan postgres yükledim. İlk kullandığımda iyi çalıştı, ancak bir yeniden başlatmadan sonra bu sorunu vardı. Peki, bunun neden işe yaradığını açıklayabilir misiniz?
Dan Williams

2
benim için çalıştı, ancak yeni başlayanlar için, birisi bunun neden ve ne kadar güvenli olduğunu açıklayabilir mi
Alexander Mills

59

OS X kullanıyorsanız " Postgres.app " daha iyi bir düzeltmedir


İşte düzeltme:

  1. Veritabanını durdurun
  2. cd /var
  3. rm -r pgsql_socket
  4. ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. PostgreSQL'i yeniden başlatın (bilgisayarınızı değil)

Daha fazla bilgi " postgresql 9.0.3. On Lion Dev Preview 1 " adresinde bulunabilir .


2
Benim için hatalar geri ve bu düzeltme yardımcı olmadı. Gerçekten neler olup bittiğini anlamak için karanlık bir odada dolaşırken kendimi bir düzeltme uygulaması için hissediyorum. Bu sorunu nasıl teşhis edip çözebileceğimi açıklamanız mümkün mü?
Evolve

Benim için çalışıyor. /tmp_Postgres'e takılmak biraz garip geliyor, ama hey :)
wrdevos

postgresapp çalışıyor, ama neden terminalde sunucumu başlatamıyorum? Ben bu app çıktıktan sonra sorun beklendiği gibi geri gelir.
hakunami

Bu benim için çalıştı, ancak root olmanız veya # 2 - 4'ü yürütmek için sudo kullanmanız gerektiğini unutmayın. Ayrıca, lütfen adım 5'i açıklığa kavuşturun.
mpelzsherman

2
Büyük harfler daha iyi cevap vermez. Postgres'i Homebrew (hizmetler) aracılığıyla kurmak ve çalıştırmak hala mükemmel
Drenmi

55

Benim için bu işe yarıyor

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

9
Benim durumumda, pid sildikten sonra postgresql ile yeniden başlatmam gerekiyordupg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Obromios

4
Ben de homebrew tarafından yüklendiğinde postgres yeniden başlatmak zorunda kaldı, bunu şöyle yapabilirsiniz:brew services restart postgresql
santuxus

2
No such file or directoryBenim durumumda docker env
içindeyim

2
rm: /usr/local/var/postgres/postmaster.pid: Böyle bir dosya veya dizin yok
nourza

13

Bahsettiğiniz hata için bu benim için çalıştı. Bunlardan birini yapın :

  1. Yükleme sırasında postgres.confvarsayılan bağlantı noktasından başka bir şey kullandıysanız , dosyada belirtilen varsayılan bağlantı noktanızı değiştirin 5432.

  2. Bağlantı noktası numarasını değiştirin ve postgresql.confDB sunucusunu yeniden başlatın.

  3. psqlTam komutu yazmak yerine :

    psql -p 5432 -h localhost   
    • sunucu adı ve bağlantı noktası no

1. Bence benim kurulum varsayılanlara göre olurdu.
Evolve

2. Bunu değiştirebilirim, limanı değiştirmenin herhangi bir anlamı var mı?
Evolve

3. Yukarıdaki 3'ten çıktımı ekledim.
Evolve

Seçenek 3, özel bağlantı noktasıyla çalıştı. Yüklü birden fazla pg sunucum olduğu için (PostgreSQL 9.1, 9.2 ve 9.3), doğru psql'yi de işaret etmek zorunda kaldım.
gpasse

11

Homebrew kullanıyorsanız Postgresql end pg gems'i kaldırın: *

$ gem uninstall pg
$ brew uninstall postgresql

/ Usr / local üzerindeki izni düzeltmek için aşağıdaki komut dosyasını indirin ve çalıştırın: * https://gist.github.com/rpavlik/768518

$ ruby fix_homebrew.rb

Sonra Postgres'i tekrar yükleyin ve pg gem: *

$ brew install postgresql  
$ initdb /usr/local/var/postgres -E utf8

Loging postgresql'i oturum açma çalıştırmasında başlatmak için:

$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents 

Veya manuel olarak başlayın.

Pg gem yükle

$ gem install pg

Umarım yardımcı olmuştur


Kimden brew info postgres:ARCHFLAGS="-arch x86_64" gem install pg
wrdevos

1
Bu db kayıtları silmek olmaz mı?
kibaekr

initdb /usr/local/var/postgres -E utf8İşler. Çok teşekkürler.
Chris Jeon

8

Postgres'i 9.3.x sürümüne yükselttiğimde bu sorunu yaşadım. Benim için hızlı düzeltme, daha önce sahip olduğum 9.2.x sürümüne (yeni bir tane yüklemeye gerek yok) indirmektir.

$ ls /usr/local/Cellar/postgresql/
9.2.4
9.3.2
$ brew switch postgresql 9.2.4
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
<open a new Terminal tab or window to reload>
$ psql

" Homebrew formülün belirli bir sürümünü yüklemek? " Sorunu çözmek için alternatif yollar ile birlikte çok daha kapsamlı bir açıklama sunuyor.


Katkınız ve düzeltmenizi tekrarlamanız için açık talimatlar için teşekkürler. Dahil ettiğiniz bu bağlantı kapsamlı, şu anda postgres ile ilgili sorunlar yaşamıyorum, bu yüzden bunun henüz başkaları için ne kadar yararlı olduğundan emin değilim, ancak bunu yararlı bulursanız, lütfen başkalarına.
Evolve

Belki doğrudan olmasa da, yararlı ve alakalı buluyorum. Sorunu sadece sürümleri değiştirerek, oldukça yaygın bir araç olan demleme kullanarak çözdü ve şu adımları tekrarladı, şimdiye kadar, bağlantı demlemek için daha fazla konuya giriyor, ancak bunun değerini sorguladığınızı görebiliyorum OP sorusu bağlamında.
wkhatch


5

Yani buradaki birçok sorun için, insanlar zaten psql çalıştırıyor ve kaldırmak zorunda görünüyorlar postmaster.pid. Ancak, sistemime hiç bir zaman postgres bile yüklenmediği için bu sorunu yaşamadım.

MAC OSX Yosemite'de benim için çalışan bir çözüm

  1. Http://postgresapp.com/ adresine gittim ve uygulamayı indirdim.
  2. Uygulamayı Uygulama / dizine taşıdım
  3. Bunu .bashrc veya .bash_profile veya .zshrc'ye ekleyerek $ PATH'a ekledim: export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  4. Postgres'i Uygulamalar dizininden çalıştırdım ve komutu tekrar çalıştırdım ve işe yaradı.

Bu yardımcı olur umarım! Toodles!

Ayrıca, bu cevap bana en çok yardımcı oldu: https://stackoverflow.com/a/21503349/3173748


Bu, demlemek yerine Postgres uygulamasına işaret etmiyor mu? Bu sizi bazı yararlı paketlerden kesebilir (örneğin, beni sonsuz keder ve şimdi buradayım) Postgres uygulaması için yükleyemediğiniz
pgrouting

4

Çalıştırdığınızda: psql -p 5432 -h localhost geridönüş sürücüsünü kullanmaz, ancak gerçek bir soket kullanır ve bu nedenle soket bağlantılarını kabul etmek için postgres'i yapılandırmanız gerekir. Bu nedenle pgadmin ve diğer istemciler çalışabilse de psql çalışmaz.

Hem postgresql.conf dosyasını hem de pg_hba.conf dosyalarını değiştirmeniz gerekir, böylece gerçek bir soket üzerinden bağlantıya izin verin. Bu, uzak bir IP'den bağlantıya da izin verecektir, bu yüzden varsayılan olarak devre dışıdır.

Bu dosyalar veri dizinindedir ancak asıl konum postgres'in nasıl kurulduğuna bağlı olarak farklı olabilir. Postgres çalışırken şu komutu çalıştırın:

ps -ef | grep postmaster

Bu iki dosya -D dizinidir (belki / usr / local / pgsql / data).

Postgresql.conf dosyası için listen_address komutunu açın ve şu şekilde değiştirin:

listen_address = '*'

Pg_hba.conf için satırı ekleyin:

host all all 0.0.0.0/0 md5

2

Mac veya Homebrew'ı gerçekten tanımıyorum, ancak PostgreSQL'i çok iyi tanıyorum.

Günlüklerin PostgreSQL'den nerede olduğunu ve PostgreSQL için soket dizininin ne olduğunu bulmak istiyorsunuz. PG oluşturduğunuzda varsayılan olarak soket dizini / tmp / şeklindedir. PG oluşturduğunuzda ve sonra PG'yi başlattığınızda bunu değiştirmediyseniz, / tmp içinde bir soket dosyası görebilmeniz gerekir: ls -al / tmp

Soket dosyası bir "." İle başlar, bu yüzden '-a' ile ls arasında görmezsiniz.

Orada bir soket görmüyorsanız ve ps awux'dan bir şey görmüyorsanız | grep postgres, o zaman PG muhtemelen çalışmıyor, ya da belki de OSX tarafından yüklenmiş olan. Neler olabiliyorsa, 5432 numaralı bağlantı noktasını localhost'ta dinleme konusunda bir çakışma yaşıyor olabilirsiniz - netstat -anp kullanın, eğer bir şey varsa, 5432'yi dinliyorsa. Bir Mac OSX PG zaten bu bağlantı noktasını dinliyorsa, sorun olabilir.

Umarım yardımcı olur. Homebrew'un işleri biraz çirkin hale getirebileceğini ve bunun yerine bir çok insanı VM kullanmayı teşvik etmek için konuştuğumu duydum.


Buna katkıda bulunduğunuz için teşekkür ederiz. Size biraz daha fazla arka plan vermenize yardımcı olursa, homebrew postgres yüklerken bu komut dosyasını çalıştırır. github.com/Homebrew/homebrew-core/blob/master/Formula/… Bir göz atmanızı ve bulduklarınızdan daha fazla bilgi paylaşmanızı umuyorum. İnsanların ihtiyaç duyduklarını düşündüğüm, bu hatayı neden aldıklarını hata ayıklamanın daha kolay bir yoludur, böylece hangi eylemi yapacaklarını bilirler.
Evolve

Bu komut dosyası ne anlayabiliyorum dayanarak, bir "var" dizininde, muhtemelen HOMEBREW_PREFIX altında bir "postgres.log" vardır. Bu günlük dosyası, başlatılmaya çalışan PG ile ilgili bilgiler içerecektir (bir nedenden dolayı başlatılamıyorsa dahil). 5432 numaralı bağlantı noktasını dinleyen başka bir işlem nedeniyle PG'nin başlayamadığını gösteren örnek bir mesaj:
Stephen Frost

2016-12-19 09: 11: 59.582 EST [20669] LOG: IPv4 soketine bağlanamadı: Adres zaten kullanılıyor 2016-12-19 09: 11: 59.582 EST [20669] İPUCU: Bağlantı noktası 5432'de zaten çalışan başka bir posta yöneticisi mi? ? Değilse, birkaç saniye bekleyin ve tekrar deneyin. 2016-12-19 09: 11: 59.582 EST [20669] UYARI: "localhost" için dinleme soketi oluşturulamadı 2016-12-19 09: 11: 59.582 EST [20669] FATAL: 2016'da herhangi bir TCP / IP soketi oluşturulamadı -12-19 09: 11: 59.582 EST [20669] LOG: veritabanı sistemi kapalı
Stephen Frost

Ayrıca, komut dosyasının varsayılan yuva dizinini değiştirmediği anlaşılıyor, bu nedenle / tmp / olmalıdır. Postgresql.conf dosyası için PG veri dizinine ({HOMEBREW_PREFIX} / var / postgres gibi görünüyor) bakabilir ve "unix_socket_directories" için arama yapabilirsiniz. Varsayılan olarak yorumlanmıştır ancak varsayılan ayarlıdır, örneğin:
Stephen Frost

#unix_socket_directories = '/ tmp' # virgülle ayrılmış dizin listesi
Stephen Frost

2

Homebrew kullanarak Mac 10.15.5 üzerinde çalışırken bu hatayla karşılaştım.

Postresql çıktığında otomatik olarak silinmesi gereken postmaster.pid adlı bir dosya vardır.

Aşağıdakileri yapmazsa

  • demlemek hizmetleri postgresql durdurmak <--- rm db bozmadan önce çıkmak başarısız
  • sudo rm /usr/local/var/postgres/postmaster.pid


1

Bu hatayı almanızın bir nedeni, bilgisayarınızı yeniden başlattığınızda yerel postgres veritabanınızın kapanmasıdır. Yeni bir terminal penceresinde şunu yazın:

$psql -h localhost 

sunucuyu yeniden başlatmak için.


1

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

1) postgres93.app veya başka bir sürümü indirin . Bu uygulamayı / Applications / klasörüne ekleyin.

2) Dosyaya bir satır (komut ) ekleyin.bash_profile (ana dizinimde bulunan) :

export 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) Tüm bu manipülasyonlardan sonra çalıştırmaktan $ createuser -SRDP user_nameve diğer komutlardan memnunum ve işe yaradığını görmekten memnun oldum ! Postgres93.appsisteminiz her başlatıldığında çalıştırı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 diğerlerine yardımcı olması beni memnun edecektir.


1

PostgreSQL 9.3 aldım ve aynı hatayı aldım,

Sunucuya bağlanılamadı: Bağlantı reddedildi Sunucu, "localhost" ana bilgisayarında (127.0.0.1) çalışıyor ve 5432 numaralı bağlantı noktasında TCP / IP bağlantılarını kabul ediyor mu?

Bunu kullanarak sabit:

chmod 777  /var/lib/pgsql/9.3/data/pg_hba.conf 
service postgresql-9.3 restart

Benim için çalışıyor.


Bu dosya benim için mevcut değil
allthesignals

1

değer için, benim dosya ( ) md4yerine bir yazım hatası ( md5) olduğunda aynı hatayı yaşadımpg_hba.conf/etc/postgresql/9.5/main/pg_hba.conf

Buraya benim yaptığım gibi gelirseniz, orada saçma bir şey olmadığından emin olmak için bu dosyayı bir kez daha kontrol edin.


pg_hba.confdosya nerede
bubakazouba

1
/etc/postgresql/{postgres_version ///main/pg_hba.conf
Aidan Melen

0

PostgreSQL'in yerel olarak çalıştırılmasında farklı sorunlar olabilir. Yüklü postgreslerin tüm sürümlerini temizlemenizi ve yeni başlamayı öneririm. Kurduktan sonra, raylar projeniz güncelse, veritabanınızı yeniden oluşturmak çok kolaydırdb/schema.rb

PostgreSQL'i genellikle Mac'e nasıl yükleyeceğim . Yerel olarak kök kullanıcı altında veritabanı çalıştırıyorsanız, bir oluşturur son adımı atlamak isteyebilirsiniz todokullanıcıyı


0

Sebeplerden biri şu olabilir:

postgresql.conf dosyasındaki unix_socket_directories aradıkları dizinle listelenmiyor.

Soru örneğinde, postgresql.conf dosyasında bu dizin / tmp aranıyor olmalıdır

böyle bir şey:

unix_socket_directories = '/var/run/postgresql,/tmp'    # comma-separated list of directories

Bu çözüm benim için çalıştı.


0

MacOS kullanıyorsanız ve homebrew kullanıyorsanız bu yanıtı son derece yararlı buldum:

https://stackoverflow.com/a/27708774/4062901

Benim için sunucum çalışıyordu ancak yükseltme nedeniyle bağlantı sorunları yaşıyorum (not: demlemek hizmetleri kullanıyorum). Postgres çalışıyorsa, cat /usr/local/var/postgres/server.loggünlüklerin ne dediğini görün ve deneyin . Benim hatam bir geçiş sorunuydu, bir geçiş sorunuydu.

Ayrıca manuel geçiş sonra onlar teklif (ama çalışır ama) artık benim kullanıcı için bir tablo bulunamadı bulundu. Bunu düzeltmek için bu komutu deneyin: createdb( psql: FATAL aracılığıyla cevaplandı : "<user>" veritabanı yok )


0

Çalışırken hata göründüğünde Postgres'i yeniden başlatın brew services restart postgresqlve tekrar deneyin.


0

Benim için komut rm /usr/local/var/postgres/postmaster.pidişe yaramadı çünkü homebrew ile belirli bir postgresql sürümü yükledim.

doğru komut rm /usr/local/var/postgres@10/postmaster.pid.

sonra brew services restart postgresql@10.


-5

Çok basit. Sadece database.yaml dosyanıza host ekleyin.


host: 127.0.0.1 veya host: localhost örneğin.
Ricardo - Nextv

Herkes basit bir çözümü sever. Peki bu nasıl çalışıyor? Yukarıdaki yorumlarımda söylediğim gibi, bunu araştırmak beni birçok karmaşık rotayı aşağı indirdi. Biraz ayrıntı verebilir ve sorunun gerçekte ne gördüğünü ve bu basit değişikliğin sorunu nasıl ele aldığı konusunda bize biraz daha fazla bilgi verebilir misiniz? Buna katkıda bulunduğunuz için teşekkür ederiz! :)
Evolve

Fark IP bağlantısı ile soket dosyasının nerede olduğu konusunda endişelenmenize gerek yoktur; bunun yerine IP adresi konusunda endişe duyarsınız.
Jim Nasby
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.