File Socket “/var/pgsql_socket/.s.PGSQL.5432” Tidak Ada di Mountain Lion (Server OS X)

95

Saya baru saja mengupgrade MacMini Server saya dari Lion Server ke Mountain Lion menggunakan OS X Server. Saya mengalami masalah yang sama dengan PostgreSQL yang saya alami tahun lalu ketika saya pertama kali menginstal Lion Server.

Ketika saya mencoba melakukan segala jenis perintah terminal PostgreSQL, saya mendapatkan pesan kesalahan terkenal berikut yang banyak didapat selama bertahun-tahun:

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

Saya mencoba mengubah kata sandi untuk _postgres ketika saya mendapat kesalahan. Saya mencoba beberapa perintah tetapi mendapatkan kesalahan yang sama. Saya baru saja me-reboot server saya tetapi tidak berhasil. Saya masuk sebagai root untuk melihat / var / pgsql_socket dan foldernya kosong. Folder / var / pgsql_socket_alt juga kosong.

Saya telah memeriksa online tentang ini. Namun hampir semua solusi yang telah saya baca, termasuk di Stack Overflow, menyarankan penghapusan dan instal ulang PostgreSQL. Saya tidak tahu tetapi ini sepertinya bukan opsi yang masuk akal karena beberapa opsi di Aplikasi Server menggunakan PostgreSQL. Saya menghubungi Dukungan Perusahaan Apple (tanpa kesepakatan) dan saya diberi tahu bahwa masalah saya harus diselesaikan oleh pengembang yang akan mengeluarkan $ 695.

Saya memiliki situs web yang sedang tidak aktif karena saya tidak dapat membangunnya kembali. Saya tidak tahu ke mana harus meminta bantuan untuk ini pada saat ini. Saya akan terus mencari online untuk melihat apakah saya dapat menemukan sesuatu. Namun saya berharap seseorang dapat memberi saya jawaban dengan cepat sehingga saya dapat membangun kembali database saya.

Pembaruan: 13/12/2012 15:33 GMT-6

Ini adalah keluaran saya untuk ps auwwx | grep postg:

_postgres      28123   0.0  0.1  2479696   7724   ??  Ss    3:01PM   0:00.04 /Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D /Library/Server/PostgreSQL For Server Services/Data -c listen_addresses= -c log_connections=on -c log_directory=/Library/Logs/PostgreSQL -c log_filename=PostgreSQL_Server_Services.log -c log_line_prefix=%t  -c log_lock_waits=on -c log_statement=ddl -c logging_collector=on -c unix_socket_directory=/Library/Server/PostgreSQL For Server Services/Socket -c unix_socket_group=_postgres -c unix_socket_permissions=0770
server1        28216   0.0  0.0  2432768    620 s000  R+    3:02PM   0:00.00 grep postg
_postgres      28138   0.0  0.0  2439388    752   ??  Ss    3:01PM   0:00.01 postgres: stats collector process                           
_postgres      28137   0.0  0.0  2479828   1968   ??  Ss    3:01PM   0:00.00 postgres: autovacuum launcher process                           
_postgres      28136   0.0  0.0  2479696    544   ??  Ss    3:01PM   0:00.00 postgres: wal writer process                           
_postgres      28135   0.0  0.0  2479696    732   ??  Ss    3:01PM   0:00.01 postgres: writer process                           
_postgres      28134   0.0  0.0  2479696    592   ??  Ss    3:01PM   0:00.00 postgres: checkpointer process                           
_postgres      28131   0.0  0.0  2439388    368   ??  Ss    3:01PM   0:00.00 postgres: logger process 

Pembaruan: 13/12/2012 18:10 GMT-6

Setelah pencarian web yang intens, video ini ditemukan. Saya bisa membuat PostgreSQL berfungsi dan menghapus kesalahan. Saya dapat terhubung menggunakan pgadmin dan phppgadmin. Saya akan kembali ke Lion Server karena frustrasi. Sekarang saya tidak perlu melakukannya.

http://www.youtube.com/watch?v=y1c7WFMMkZ4

Pamela Cook - LightBe Corp.
sumber
22
Masalah Anda bermuara pada fakta bahwa PostgreSQL versi pra-instal Mac OS X psqlada di Anda PATHsebelum versi yang Anda instal. Mereka mencari soket unix di tempat yang berbeda. Gunakan tcp / ip dengan menentukan -h localhostatau lebih baik perbaiki Anda PATHsehingga yang benar psqlditemukan terlebih dahulu. Keputusan aneh Apple untuk tidak hanya memaketkan PostgreSQL, tetapi mengacaukannya sehingga menempatkan barang-barang di tempat yang tidak standar adalah akar penyebab masalah ini.
Craig Ringer
3
Ada masalah yang sedang berlangsung di OSX, di mana pembuat paket memutuskan untuk meletakkan soket unix-domain di tempat yang berbeda dari biasanya. Biarkan saya mencari ... BRB ... stackoverflow.com/a/8482546/905902
wildplasser
Saya menyalin PATH lama di .bashrc. Saya belum menginstal postgreSQL versi lain. Berikut adalah pernyataan PATH saya yang menyertakan kode untuk RVM. Jika seseorang bisa memberi tahu saya apa yang harus saya ubah, saya akan melakukannya. Ketika saya melakukan yang psql itu ditemukan di / usr / bin / psql. Terima kasih banyak atas bantuan Anda semua. PATH = "$ PATH: $ HOME / .rvm / bin: / usr / bin / psql: / usr / local: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin" Saya juga mencari file socket saat masuk sebagai root.
Pamela Cook - LightBe Corp
1
Bagi mereka yang menggunakan homebrewdan osx@CraigRinger mungkin memiliki jawaban yang tepat untuk Anda, konfirmasikan dengan brew doctor.
Karthik T

Jawaban:

299

Saya dapat menambahkan yang berikut ini ke .bash_profile saya untuk mencegah kesalahan:

export PGHOST=localhost

Ini berfungsi karena :

Jika Anda menghilangkan nama host, psql akan terhubung melalui soket domain-Unix ke server di host lokal, atau melalui TCP / IP ke host lokal pada mesin yang tidak memiliki soket domain Unix.

OS Anda mendukung soket domain Unix, tetapi soket Unix PostgreSQL yang psqldibutuhkan tidak ada atau berada di lokasi yang berbeda dari yang diharapkan.

Menentukan nama host secara eksplisit sebagai localhostkekuatan psqluntuk menggunakan TCP / IP. Menetapkan variabel lingkungan PGHOSTadalah salah satu cara untuk mencapainya. Ini didokumentasikan dalam manual psql .

mmaster
sumber
37
Untuk siapa pun yang mengalami ini dengan aplikasi Rails: Anda dapat menentukan host di database.yml.
dwhalen
12
Sihir macam apakah ini? Maksudku, serius. Bisakah Anda menjelaskan?
Sreejith Ramakrishnan
1
Saya selalu kembali ke jawaban ini! Menyelamatkan hidupku lagi. Potongan ini benar-benar ada di halaman ini, postgresapp.com/documentation/cli-tools.html .
sambecker
1
Saya tidak tahu mengapa, tetapi berhasil untuk saya! Saya menemui masalah ini di rails 5 ketika saya menggunakan 'rails db: create', tapi saya sudah mengatur host: localhostdi database.yml. @when
Spark.
1
Ini berfungsi untuk Rails 5.2 tanpa memodifikasi database.yml, ketika kesalahan ini muncul setelah menurunkan Postgres ke versi lama yang dikelola Homebrew.
SexxLuthor
37

Coba tempel di konsol ini:

$ mkdir /var/pgsql_socket/ 

$ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/
Bryan Algutria
sumber
Akhirnya, saya mendapat jawaban ini.
Abs
Baik. Meskipun saya pikir saya tahu mengapa ini berhasil, sedikit penjelasan lebih lanjut akan berguna. Solusi ini lebih baik daripada jawaban yang diterima, hanya detailnya yang hilang.
Glutexo
23

Saya dapat menyelesaikannya hanya dengan mengisi 127.0.0.1 untuk alamat host PostgreSQL daripada membiarkannya kosong. (Contoh Django)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'USER': 'database_user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '',
        }
}
Nick Woodhams
sumber
1
Saya merasa agak bodoh sekarang, saya telah mencoba memperbaiki masalah ini selama sekitar 2 hari. Di Windows saya menggunakan '127.0.0.1', tetapi kemudian saya memindahkan kode saya ke produksi (Debian 7) dan harus mengubahnya menjadi ''. Agak aneh bahwa mereka memberikan pesan kesalahan yang membuat orang percaya bahwa masalahnya mungkin ada di tempat lain.
fang_dejavu
10

Buka 'postgresql.conf' di editor favorit Anda. Cari variabel 'unix_socket_directories', kemungkinan besar akan terlihat seperti ini:

unix_socket_directories = '/private/tmp/'

Ubah baris menjadi ini:

unix_socket_directories = '/var/pgsql_socket/'

Perhatikan jika Anda ingin file soket di lebih dari satu direktori, pisahkan koma.

Craig Thomas
sumber
Ini memiliki efek yang diinginkan saat mencoba membuat soket di tempat lain, tetapi server tidak akan mulai karena tidak memiliki izin untuk membuat file di direktori / var. Saya akhirnya mengubah file konfigurasi pada tingkat yang lebih tinggi untuk hanya menggunakan soket tempat asalnya. Hampir seperti yang diberikan dalam jawaban ini stackoverflow.com/a/29511357/1535177 .
Eosis
7

Seperti yang disebutkan oleh orang lain di komentar, solusi yang sangat sederhana untuk masalah ini adalah dengan mendeklarasikan 'host' database dalam konfigurasi database. Menambahkan jawaban ini hanya untuk membuatnya sedikit lebih jelas bagi siapa pun yang membaca ini.

Di aplikasi Ruby on Rails misalnya, edit /config/database.yml:

development:
  adapter: postgresql
  encoding: unicode
  database: database_name
  pool: 5
  host: localhost

Catatan: baris terakhir ditambahkan untuk menentukan host. Sebelum memperbarui ke Yosemite, saya tidak pernah perlu menentukan host dengan cara ini.

Semoga ini bisa membantu seseorang.

Bersulang

David Battersby
sumber
Saya perlu mengatur host saya ke direktori yang saya temukan berisi .s.PGSQL.5432file tersebut.
Eosis
5

Periksa status database:

service postgresql status

Jika database tidak berjalan, jalankan db:

sudo service postgresql start
Sivakumar RJ
sumber
terjebak dengan kesalahan di atas dan menyelesaikannya dengan memulai db.
Sivakumar RJ
4

Bisakah Anda memeriksa file postgresql.conf Anda ??

Pada port apa postgres Anda berjalan ??

Saya pikir itu tidak berjalan pada port 5432. Jika tidak, ubah ke 5432

ATAU pada penggunaan terminal

psql -U  postgres -p YOUR_PORT_NUMBER database_name
Pemburu
sumber
1
Saya tidak dapat menjalankan perintah terminal. Saya mendapatkan kesalahan yang sama. Saya butuh bantuan di mana saya bisa menemukan file postgresql.conf. Saya dulu memiliki folder / var / pgsql saat menjalankan Lion Server. Saya kira itu sudah hilang sekarang. Saya baru saja memposting output saya untuk perintah ps grep. Saya mengaktifkan layanan Wiki untuk menjalankan PostgreSQL. Saya diberitahu bahwa saya dapat menggunakan perintah sudo serveradmin tanpa mengaktifkan layanan aplikasi Server apa pun tetapi tidak berfungsi. Saya login sebagai root sekarang jadi saya seharusnya bisa melakukan apa saja :) Saya memeriksa port di Network Utility. 5432 tidak digunakan.
Pamela Cook - LightBe Corp
2

Saya mengalami masalah ini dengan Django.

Perbaiki dengan menyetel nama host Anda secara eksplisit ke "localhost".

Ashwin Balamohan
sumber
2

saya membuat kata dengan melakukan ini:

dpkg-reconfigure locales

dan pilih lokal pilihan Anda

pg_createcluster 9.5 main --start

(9.5 adalah versi postgresql saya)

/etc/init.d/postgresql start

dan kemudian kata itu!

sudo su - postgres
psql
mymusise
sumber
1
apt-get install postgres-xc-client
apt-get install postgres-xc
Lucia
sumber
1
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"?

Saya terus mendapatkan kesalahan di atas dan tidak ada solusi di atas yang berhasil untuk saya. Akhirnya solusi berikut memecahkan masalah saya di Mac OS X

Instal postgres menggunakan brew

brew install postgres

Instal layanan pembuatan bir

brew tap homebrew/services

Untuk memulai postgres sebagai layanan latar belakang

brew services start postgresql

Untuk menghentikan postgres secara manual

brew services stop postgresql

Kami juga dapat menggunakan layanan brew untuk memulai ulang Postgres

brew services restart postgresql
Sudharshan
sumber
1

periksa server postgres berjalan dengan kode berikut

sudo service postgresql status

jika server postgres tidak aktif, tulis perintah berikut.

sudo service postgresql start
wailinux.dll
sumber
1

Saya mendapat kesalahan ini setelah komputer saya macet dan reboot sendiri. Solusi untuk saya tidak ditemukan di halaman ini, melainkan pada pertanyaan SO lain yang berperingkat sangat tinggi dengan kesalahan yang sama psql: tidak dapat terhubung ke server: Tidak ada file atau direktori seperti itu (Mac OS X) . Jawabannya: hapus saja file ini /usr/local/var/postgres/postmaster.pid, lalu brew services restart postgresqllakukan triknya. Perhatikan peringatan pada jawaban tertaut tentang membunuh proses postgres sebelum melakukan ini, Anda dapat merusak db Anda secara permanen.

wetjosh
sumber
1

Untuk aplikasi RubyOnRails tambahkan localhost Jika Anda menggunakan versi kustom Postgresql

# config/database.yml
default: &default
  host: localhost
itsnikolay
sumber
0

Izin file dibatasi pada Postgres db yang dimiliki oleh Mac OS. Izin ini disetel ulang setelah reboot, atau restart Postgres: misalnya serveradmin start postgres.

Jadi, setel ulang sementara izin atau kepemilikan:

sudo chmod o+rwx /var/pgsql_socket/.s.PGSQL.5432
sudo chown "webUser"  /var/pgsql_socket/.s.PGSQL.5432

Pengaturan ulang izin tidak aman, jadi instal versi db yang Anda miliki untuk solusinya.

Clewis
sumber
0

Butuh beberapa saat bagi saya, tetapi saya bisa menyelesaikannya setelah membaca saran yang ditawarkan dan pencarian web tambahan dilakukan. Saya menggunakan informasi dalam video YouTube berikut yang dibuat oleh Mactasia:

http://www.youtube.com/watch?v=y1c7WFMMkZ4

Ketika saya melakukan ini, saya melihat file dengan .lock sebagai ekstensi. Namun saya masih mendapatkan kesalahan ketika saya mencoba untuk memulai Server Rails ketika saya kembali mengerjakan aplikasi Rails saya menggunakan PostgreSQL. Kali ini saya mendapat kesalahan izin ditolak. Saat itulah saya ingat bahwa saya tidak hanya harus mengubah listen_addresses di plist tetapi saya juga harus mengubah unit_socket_permissions menjadi 0777. Saya juga masuk sebagai root untuk mengubah izin pada folder var / pgsql_socket tempat saya dapat mengaksesnya di tingkat pengguna. Postgres berfungsi dengan baik sekarang. Saya sedang dalam proses memuat ulang data saya dari cadangan SQL saya.

Apa yang saya tidak mengerti adalah bahwa ketika saya mengaktifkan wiki, PostgreSQL seharusnya berfungsi ketika saya melakukan sudo serveradmin fullstatus postgres tetapi saya masih mendapatkan kesalahan. Baiklah.

Pamela Cook - LightBe Corp.
sumber
0

Saya baru saja membuat cluster baru dan itu berhasil untuk saya, saya menggunakan (PostgreSQL) 9.3.20:

sudo pg_createcluster 9.3 main --start
Bruno Filgueiras
sumber
0

Pertama hapus postgres yang diinstal:

sudo apt-get purge postgr*
sudo apt-get autoremove

Kemudian instal 'sinaptik':

sudo apt-get install synaptic
sudo apt-get update

Kemudian instal Postgres

sudo apt-get install postgresql postgresql-contrib
Gurudath BN
sumber