Kesalahan PostgreSQL 'Tidak dapat terhubung ke server: Tidak ada file atau direktori seperti itu'


138

Seperti beberapa orang lain, saya mendapatkan kesalahan ini saat menjalankan rake db: bermigrasi dalam proyek saya atau bahkan mencoba sebagian besar tugas database untuk aplikasi Ruby on Rails 3.2 saya.

PGError (tidak dapat terhubung ke server: Tidak ada file atau direktori seperti itu. Apakah server berjalan secara lokal dan menerima koneksi pada soket domain Unix "/tmp/.s.PGSQL.5432"?

Saya telah menginstal PostgreSQL dengan Homebrew sejak lama dan mengikuti percobaan instalasi MongoDB baru-baru ini menginstal PostgreSQL saya tidak pernah sama. Saya menjalankan OS X v10.6 Snow Leopard.

Apa yang salah dan bagaimana saya lebih memahami bagaimana PostgreSQL dan harus diatur di Mac saya?

Sejauh ini (menurut saya) ini memberi tahu saya bahwa PostgreSQL tidak berjalan (?).

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

Tetapi apakah ini memberi tahu saya bahwa PostgreSQL sedang berjalan?

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

Bagaimana cara mengatasinya? apa yang tidak saya lihat?

PS: ~/Library/LaunchAgentsmencakup dua file .plist PostgreSQL. Saya tidak yakin apakah itu relevan.

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

Saya mencoba yang berikut ini dan mendapatkan hasil seperti di bawah ini.

$ psql -p 5432 -h localhost

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?

Saya telah membaca sejak itu ini terjadi karena OS X menginstal versi PostgreSQL-nya sendiri dan Homebrew menginstal versi yang berbeda di tempat yang berbeda dan perintah PostgreSQL mencari di direktori / tmp /. Anda harus mencari lebih banyak di Stack Overflow, tetapi pada dasarnya Anda menghubungkan PostgreSQL sehingga apa pun yang mencari di jalur tmp itu benar-benar menemukan jalur yang sebenarnya, jika itu masuk akal.

Ini adalah tautan di mana saya menemukan beberapa hal lagi untuk dicoba, khususnya melakukan symlink seperti di atas, Mac OSX Lion Postgres tidak menerima koneksi di /tmp/.s.PGSQL.5432 . Saya masih berharap seseorang akan mengumpulkan penjelasan yang layak tentang konsep di balik menginstal PostgreSQL di OS X dan mengapa semuanya begitu sulit.

Wawasan terbaru untuk membantu pemecahan masalah:

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

Lalu lari:

$ echo $PATH

Hal utama yang harus diperhatikan adalah ini:

Pastikan entri jalur untuk salinan PostgreSQL yang ingin Anda jalankan DATANG SEBELUM jalur ke PostgreSQL sistem OS X.

Ini adalah persyaratan inti yang memutuskan PostgreSQL mana yang dijalankan dan yang saya diberitahu mengarah ke sebagian besar masalah ini.


Apakah Anda pernah menemukan solusi untuk ini? Saya melihat Anda belum menandai satu. Tak satu pun dari ini membantu saya.
Andras Gyomrey

Sebagian besar masih vodoo dan inkarnasi aneh untuk membuatnya berfungsi. Saya baru saja menambahkan [Sunting 2] di atas dengan tautan dengan beberapa saran lagi dan bagaimana melakukan symlink sesuai dengan edit komentar saya. Symlink bekerja untuk saya pada akhirnya tetapi saya pikir saya juga menghapus dan menginstal ulang postgres dan homebrew di sana sepanjang jalan, sangat sulit untuk mengetahui dengan tepat apa yang membuat perbedaan. Semoga berhasil. Laporkan kembali jika Anda menemukan sesuatu yang baru, dengan 15.000 tampilan tentang pertanyaan ini, itu adalah sesuatu yang membuat banyak orang kesakitan!
Berevolusi

@AndrasGyomrey Saya baru saja kembali dari RailsCamp15 di Australia dan orang mengatakan bahwa kuncinya adalah memperbaiki file jalur Anda, saya telah mengedit di Edit 3 di atas untuk menjelaskan ini.
Berevolusi

Perlu diingat bahwa launchctl melaporkan sesuatu sebagai dimuat TIDAK selalu berarti itu aktif dan berjalan. Anda harus melihat bigsql.com sebagai alternatif; berfungsi di Mac dan memiliki UI manajemen yang baik.
Jim Nasby

Jawaban:


107

Periksa tidak ada postmaster.pid di direktori postgres Anda, mungkin /usr/local/var/postgres/

hapus ini dan mulai server.

Periksa - https://github.com/mperham/lunchy adalah pembungkus yang bagus untuk launchctl.


3
Ini berhasil untuk saya. Saya baru saja menginstal yosemite, dan memuat postgres dari homebrew. Berfungsi dengan baik saat pertama kali saya menggunakannya, tetapi mengalami masalah ini setelah restart. Jadi, dapatkah Anda menjelaskan mengapa ini berhasil?
Dan Williams

2
bekerja untuk saya, tetapi untuk newbs, dapatkah seseorang menjelaskan mengapa dan seberapa aman ini
Alexander Mills

59

" Postgres.app " adalah perbaikan yang lebih baik jika Anda menggunakan OS X


Berikut cara mengatasinya:

  1. Hentikan database
  2. cd /var
  3. sudo rm -r pgsql_socket
  4. sudo ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. Mulai ulang PostgreSQL (bukan komputer Anda)

Informasi lebih lanjut tersedia di " postgresql 9.0.3. On Lion Dev Preview 1 ".


2
Kesalahan kembali untuk saya dan perbaikan ini tidak membantu. Saya merasa seperti menabrak ruangan gelap dalam bekerja untuk memahami apa yang sebenarnya terjadi dan proses untuk menerapkan perbaikan sendiri. Bisakah Anda menjelaskan bagaimana saya dapat mendiagnosis dan memperbaiki masalah ini?
Berevolusi

Bekerja untuk saya. Rasanya agak aneh untuk /tmpdinikmati _postgres, tapi hei :)
wrdevos

postgresapp berfungsi, tetapi mengapa saya tidak dapat memulai server saya di terminal? Setelah saya keluar dari aplikasi ini, masalah kembali seperti yang diharapkan.
hakunami

Ini berhasil untuk saya, tetapi perhatikan bahwa Anda harus menjadi root atau menggunakan sudo untuk menjalankan # 2 - 4. Selain itu, jelaskan langkah # 5 - Anda hanya perlu me-restart postgres, bukan komputer.
mpelzsherman

2
Huruf kapital bukanlah jawaban yang lebih baik. Masih baik-baik saja untuk menginstal dan menjalankan Postgres melalui Homebrew (layanan.)
Drenmi

56

Bagi saya, ini berhasil

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

9
Dalam kasus saya, setelah menghapus pid, saya perlu memulai ulang postgresql denganpg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Obromios

4
Saya juga harus me-restart postgres, ketika diinstal oleh homebrew, Anda dapat melakukannya seperti ini:brew services restart postgresql
santuxus

2
Saya berada di buruh pelabuhan No such file or directorydalam kasus saya
Sarz

3
rm: /usr/local/var/postgres/postmaster.pid: Tidak ada file atau direktori seperti itu
nourza

13

Jika Anda menjalankan Homebrew, hapus instalan Postgresql end pg gems: *

$ gem uninstall pg
$ brew uninstall postgresql

Unduh dan jalankan skrip berikut untuk memperbaiki izin di / usr / local: * https://gist.github.com/rpavlik/768518

$ ruby fix_homebrew.rb

Kemudian instal Postgres lagi dan pg gem: *

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

Agar launchd memulai postgresql saat login dijalankan:

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

Atau mulai secara manual.

Instal pg gem

$ gem install pg

Saya harap telah membantu


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

1
bukankah ini akan menghapus record di db?
kibaekr

initdb /usr/local/var/postgres -E utf8bekerja. Terima kasih banyak.
Chris Jeon

13

Ini berhasil untuk saya untuk kesalahan yang Anda sebutkan. Lakukan salah satu dari ini:

  1. Mungkin mengubah port default Anda yang ditentukan dalam postgres.conffile, jika Anda telah menggunakan sesuatu selain port default 5432saat menginstal.

  2. Ubah nomor port postgresql.confdan mulai ulang server DB.

  3. Daripada psqlmengetik perintah lengkap:

    psql -p 5432 -h localhost   
    
    • nama server dan nomor port

1. Saya pikir penginstalan saya akan sesuai default.
Berevolusi

2. Saya bisa mengubah ini, implikasi apa pun dari mengubah port?
Berevolusi

3. Menambahkan keluaran saya dari 3 di atas.
Berevolusi

Opsi 3 bekerja dengan port khusus. Karena saya menginstal beberapa server pg (PostgreSQL 9.1, 9.2 dan 9.3), saya juga harus mengarahkan ke psql yang benar.
gpasse

8

Saya mengalami masalah itu ketika saya mengupgrade Postgres ke 9.3.x. Perbaikan cepat bagi saya adalah menurunkan versi ke versi 9.2.x mana pun yang saya miliki sebelumnya (tidak perlu menginstal yang baru).

$ 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 menginstal versi formula tertentu? " Menawarkan penjelasan yang jauh lebih komprehensif bersama dengan cara alternatif untuk memperbaiki masalah.


Terima kasih atas kontribusi dan instruksi yang jelas untuk mengulangi perbaikan Anda. Tautan yang Anda sertakan pasti komprehensif, Saya saat ini tidak mengalami masalah dengan postgres jadi saya tidak yakin seberapa banyak ini berguna bagi orang lain, tetapi bagi orang lain jika Anda merasa ini berguna, silakan beri komentar di sini.
Berevolusi

Saya merasa itu berguna dan relevan, meskipun mungkin tidak secara langsung. Dia memecahkan masalah dengan hanya mengganti versi, menggunakan brew, yang merupakan alat yang cukup umum, dan hanya mengulangi langkah-langkahnya, sejauh ini, bagus, tautannya masuk ke masalah yang lebih spesifik untuk dibuat, jadi saya bisa melihat pertanyaan Anda tentang nilainya dalam konteks pertanyaan OP.
wkhatch


5

Jadi untuk banyak masalah di sini, tampaknya orang sudah menjalankan psql dan harus menghapusnya postmaster.pid . Namun, saya tidak memiliki masalah itu karena saya bahkan tidak pernah memasang postgres di sistem saya dengan benar.

Inilah solusi yang berhasil untuk saya di MAC OSX Yosemite

  1. Saya pergi ke http://postgresapp.com/ dan mengunduh aplikasi.
  2. Saya memindahkan aplikasi ke direktori Application /
  3. Saya menambahkannya ke $ PATH dengan menambahkan ini ke .bashrc atau .bash_profile atau .zshrc: export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  4. Saya menjalankan postgres dari direktori Aplikasi dan menjalankan perintah lagi dan berhasil.

Semoga ini membantu! Mie!

Selain itu, jawaban ini paling membantu saya: https://stackoverflow.com/a/21503349/3173748


Bukankah ini mengarah ke aplikasi Postgres daripada instalasi bir? Itu dapat menghentikan Anda dari beberapa paket bermanfaat (pgrouting misalnya, yang tidak dapat Anda instal untuk aplikasi Postgres yang telah menyebabkan saya berduka tanpa akhir dan inilah saya sekarang)
allthesignals

4

Ketika Anda menjalankan: psql -p 5432 -h localhost itu tidak menggunakan driver loopback tetapi menggunakan soket nyata dan karenanya Anda perlu mengkonfigurasi postgres untuk menerima koneksi soket. Oleh karena itu, meskipun pgadmin dan klien lain dapat bekerja, psql tidak akan bekerja.

Anda perlu mengubah file postgresql.conf dan file pg_hba.conf jadi izinkan koneksi melalui soket nyata. Ini juga akan memungkinkan koneksi dari ip jarak jauh yang mengapa itu dinonaktifkan secara default.

File-file ini ada di direktori data tetapi lokasi sebenarnya dapat berbeda tergantung pada bagaimana postgres diinstal. Dengan postgres berjalan, jalankan perintah:

ps -ef | grep postmaster

Kedua file ini adalah direktori -D (mungkin / usr / local / pgsql / data).

Untuk file postgresql.conf, hapus komentar pada list_address dan ubah menjadi:

listen_address = '*'

Untuk pg_hba.conf tambahkan baris:

host all all 0.0.0.0/0 md5

3

Saya mengalami kesalahan ini saat menjalankan Mac 10.15.5 menggunakan homebrew dan tampaknya merupakan solusi yang lebih diperbarui yang berfungsi di mana yang di atas tidak.

Ada sebuah file bernama postmaster.pid yang seharusnya secara otomatis dihapus ketika postresql keluar.

Jika tidak lakukan hal berikut

  • brew services stop postgresql <--- Gagal keluar sebelum rm dapat merusak db
  • sudo rm /usr/local/var/postgres/postmaster.pid

2

Saya tidak begitu tahu Mac atau Homebrew, tapi saya tahu PostgreSQL dengan sangat baik.

Anda ingin mencari tahu di mana log tersebut dari PostgreSQL mencoba untuk memulai dan apa direktori socket untuk PostgreSQL. Secara default saat Anda membangun PG, direktori soket adalah / tmp /. Jika Anda tidak mengubahnya ketika Anda membangun PG dan kemudian Anda memulai PG, Anda akan melihat file soket di / tmp jika Anda melakukannya: ls -al / tmp

File soket dimulai dengan ".", Jadi Anda tidak akan melihatnya dengan '-a' hingga ls.

Jika Anda tidak melihat soket di sana, dan Anda tidak melihat apa pun dari ps awux | grep postgres, maka PG mungkin tidak berjalan, atau mungkin aktif dan itu adalah OSX yang diinstal. Apa yang mungkin terjadi adalah Anda mungkin mendapatkan konflik saat mendengarkan pada port 5432 di localhost- gunakan netstat -anp untuk melihat apa, jika ada, yang mendengarkan pada 5432. Jika Mac OSX PG sudah mendengarkan pada port itu maka itu mungkin jadilah masalahnya.

Semoga membantu. Saya telah mendengar bahwa homebrew dapat membuat segalanya menjadi sedikit jelek dan banyak orang yang telah saya ajak bicara untuk mendorong menggunakan VM sebagai gantinya.


Terima kasih telah berkontribusi dalam hal ini. Jika itu membantu memberi Anda sedikit lebih banyak latar belakang, homebrew cukup menjalankan skrip ini saat menginstal postgres. github.com/Homebrew/homebrew-core/blob/master/Formula/… Saya berharap Anda dapat memeriksanya dan mungkin berbagi wawasan lebih lanjut dari apa yang Anda temukan. Apa yang menurut saya dibutuhkan orang adalah cara yang lebih mudah untuk men-debug mengapa mereka mendapatkan kesalahan ini sehingga mereka tahu tindakan apa yang harus diambil.
Berevolusi

Berdasarkan apa yang dapat saya pahami tentang skrip itu, ada "postgres.log" di direktori "var", mungkin di bawah HOMEBREW_PREFIX. File log itu akan berisi informasi tentang PG yang mencoba memulai (termasuk jika gagal memulai karena alasan tertentu). Berikut adalah contoh pesan yang menunjukkan PG gagal memulai karena proses lain mendengarkan pada port 5432:
Stephen Frost

2016-12-19 09: 11: 59.582 EST [20669] LOG: tidak dapat mengikat soket IPv4: Alamat sudah digunakan 2016-12-19 09: 11: 59.582 EST [20669] PETUNJUK: Apakah postmaster lain sudah berjalan pada port 5432 ? Jika tidak, tunggu beberapa detik dan coba lagi. 2016-12-19 09: 11: 59.582 EST [20669] PERINGATAN: tidak dapat membuat soket mendengarkan untuk "localhost" 2016-12-19 09: 11: 59.582 EST [20669] FATAL: tidak dapat membuat soket TCP / IP 2016 -12-19 09: 11: 59.582 EST [20669] LOG: sistem database dimatikan
Stephen Frost

Lebih lanjut, sepertinya skrip itu tidak mengubah direktori soket default, jadi seharusnya / tmp /. Anda bisa melihat di direktori data PG (yang tampaknya {HOMEBREW_PREFIX} / var / postgres) untuk file postgresql.conf dan mencari "unix_socket_directories". Ini dikomentari secara default tetapi memiliki set default, misalnya:
Stephen Frost

#unix_socket_directories = '/ tmp' # daftar direktori yang dipisahkan koma
Stephen Frost


1

Salah satu alasan Anda mendapatkan kesalahan ini adalah database postgres lokal Anda mati ketika Anda memulai ulang komputer Anda. Di jendela terminal baru, cukup ketik:

$psql -h localhost 

untuk memulai ulang server.


1

Halo dunia :)
Cara terbaik tapi aneh bagi saya adalah melakukan hal-hal selanjutnya.

1) Unduh postgres93.app atau versi lain. Tambahkan aplikasi ini ke / Applications / folder.

2) Tambahkan baris (perintah) ke dalam file .bash_profile(yang ada di direktori home saya):

ekspor PATH = / Aplikasi / Postgres93.app / Isi / MacOS / bin /: $ PATH
Ini adalah PATH untuk psqldari Postgres93.app. Baris (perintah) berjalan setiap kali konsol dimulai.

3) Luncurkan Postgres93.appdari /Applications/folder. Ini memulai server lokal (port adalah "5432" dan host adalah "localhost").

4) Setelah semua manipulasi ini saya senang untuk menjalankan $ createuser -SRDP user_namedan perintah lain dan melihat bahwa itu berhasil! Postgres93.appdapat dijalankan setiap kali sistem Anda dimulai.

5) Juga jika Anda ingin melihat database Anda secara grafis, Anda harus menginstal PG Commander.app. Ini cara yang baik untuk melihat postgres DB Anda sebagai tabel data yang cantik

Tentu saja, ini hanya berguna untuk server lokal. Saya akan senang jika petunjuk ini membantu orang lain yang menghadapi masalah ini.


1

Saya memiliki PostgreSQL 9.3 dan mendapatkan kesalahan yang sama,

Tidak dapat terhubung ke server: Koneksi ditolak Apakah server berjalan pada host "localhost" (127.0.0.1) dan menerima koneksi TCP / IP pada port 5432?

Saya memperbaikinya menggunakan:

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

Ini bekerja untuk saya.


File ini tidak ada untuk saya
allthesignals

1

untuk apa nilainya, saya mengalami kesalahan yang sama ini ketika saya salah ketik ( md4bukan md5) di pg_hba.conffile saya ( /etc/postgresql/9.5/main/pg_hba.conf)

Jika Anda sampai di sini seperti yang saya lakukan, periksa kembali file itu sekali untuk memastikan tidak ada yang konyol di sana.


dimana pg_hba.conffilenya?
bubakazouba

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

1

Mulai ulang Postgres segera setelah kesalahan muncul dengan menjalankan brew services restart postgresqldan kemudian coba lagi


0

Mungkin ada masalah berbeda dengan menjalankan PostgreSQL secara lokal. Saya akan merekomendasikan untuk membersihkan semua versi postgres yang diinstal dan mulai dari awal. Setelah Anda menginstalnya, sangat mudah untuk membuat ulang database Anda jika Anda memiliki proyek rel Anda dengan yang terbarudb/schema.rb

Inilah cara saya biasanya menginstal PostgreSQL di Mac . Jika Anda menjalankan database Anda di bawah pengguna root secara lokal, Anda mungkin ingin menghilangkan langkah terakhir yang membuat todopengguna


0

Salah satu alasannya bisa jadi itu

unix_socket_directories di file postgresql.conf tidak terdaftar dengan direktori yang dicari.

Dalam contoh pertanyaan itu mencari direktori / tmp ini harus disediakan di file postgresql.conf

sesuatu seperti ini:

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

Solusi ini berhasil untuk saya.


0

Jika Anda menggunakan MacOS dan menggunakan homebrew, saya menemukan jawaban ini sangat membantu:

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

Bagi saya, server saya berjalan tetapi karena peningkatan, saya mengalami masalah koneksi (catatan: Saya menggunakan layanan pembuatan bir). Jika Postgres sedang berjalan, coba cat /usr/local/var/postgres/server.logdan lihat apa kata log. Kesalahan saya adalah migrasi, bukan masalah koneksi.

Juga setelah migrasi manual yang mereka usulkan (yang berfungsi tetapi) saya menemukan tidak ada lagi tabel untuk pengguna saya. Coba perintah ini untuk memperbaikinya: createdb(dijawab melalui psql: FATAL: database "<user>" tidak ada )


0

bagi saya perintah rm /usr/local/var/postgres/postmaster.pidtidak berfungsi karena saya menginstal versi postgresql tertentu dengan homebrew.

perintah yang benar adalah rm /usr/local/var/postgres@10/postmaster.pid.

lalu brew services restart postgresql@10.


-5

Sangat sederhana. Hanya tambahkan host di file database.yaml Anda.


host: 127.0.0.1 atau host: localhost misalnya.
Ricardo - Nextv

Semua orang menyukai solusi sederhana. Tapi bagaimana cara kerjanya? Seperti yang telah saya katakan dalam komentar saya di atas, mencari ini telah membawa saya ke banyak jalan yang rumit. Dapatkah Anda menjelaskan lebih lanjut dan memberi kami sedikit lebih banyak latar belakang tentang apa yang Anda lihat masalahnya sebenarnya dan bagaimana perubahan sederhana ini mengatasi masalah tersebut. Terima kasih telah berkontribusi untuk yang satu ini! :)
Berevolusi

Perbedaannya adalah dengan koneksi IP tidak perlu mengkhawatirkan di mana letak file soket; alih-alih Anda khawatir tentang alamat IP.
Jim Nasby
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.