Baru-baru ini memperbarui mesin saya dari Mac OS X Lion (10.7.4) ke Mountain Lion (10.8) dan saya pikir itu merusak instalasi PostgreSQL saya. Itu diinstal awalnya melalui Homebrew. Saya bukan DBA, tetapi berharap seseorang dapat memberi tahu saya cara mengatasi masalah ini.
Saya tidak dapat terhubung (tetapi bisa sebelum pra-Mountain Lion):
$ 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"?
Tetapi Postgres masih berjalan dengan jelas:
$ 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
Dan itu menanggapi pertanyaan (baik untuk tes db dan pengembangan db) dari aplikasi Rails lokal
User Load (0.2ms) SELECT "users".* FROM "users"
Rendered users/index.html.haml within layouts/application (1.3ms)
Tampaknya tidak ada /var/pgsql_socket/
direktori, apalagi /var/pgsql_socket/.s.PGSQL.5432
file socket yang disebutkan di atas!?! Mungkin pemasangan Lion Mountain menghapusnya?
$ ls -l /var/ | grep pg
drwxr-x--- 2 _postgres _postgres 68 Jun 20 16:39 pgsql_socket_alt
Bagaimana saya bisa memecahkan masalah ini?
postgresql
psql
mac-os-x
Meltemi
sumber
sumber
/usr/local/var/postgres/server.log
?$PATH
berubah dengan peningkatan yang/usr/bin
ada di depan/usr/local/bin
dan saya pikir Mountain Lion mungkin datang dengan PostgreSQL pra-instal!?! Investigasi ...Jawaban:
Saya menemukan bahwa saya memiliki masalah yang sangat mirip, yaitu postgres sedang membuka soket di
/var/pgsql_socket_alt
mana tidak ada perangkat lunak saya mengharapkan untuk melihat, tetapi solusi untuk masalah saya tidak hanya masalah dengan saya$PATH
.Aku harus membuat direktori
/var/pgsql_socket
, chown untuk diriku sendiri, dan setunix_socket_directory
dipostgresql.conf
(terletak di/usr/local/var/postgres
) ke direktori tersebut, kemudian gunakanpg_ctl
biner dalam/usr/local/bin
untuk memulai postgres hak Server berhasil (yang mana$PATH
datang dalam - pastikanwhich pg_ctl
resolve ke/usr/local/bin/pg_ctl
, atau hanya selalu sebut saja secara eksplisit).Ini mungkin membantu pengguna lain yang menemukan pertanyaan ini melalui
/var/pgsql_socket_alt
penyebutan.sumber
$PATH
seperti yang saya lakukan.Penjelasan yang masuk akal dan khas adalah bahwa
psql
yang datang dengan homebrew/usr/local/bin/psql
berbeda dengan yang ada di $ PATH Anda, seperti/usr/bin/psql
(dibundel dengan OS X). Anda mungkin ingin mencoba dengan path lengkap:$ /usr/local/bin/psql -U rails -d myapp_development
Juga, ada sesuatu yang agak tidak biasa dalam
ps
output pertanyaan Anda: server postgres berjalan di bawahmeltemi
pengguna Unix, sedangkan umumnya,postgres
pengguna Unix yang berdedikasi digunakan untuk itu.sumber
_postgres
(dengan garis bawah) untuk pengguna / grup tidak diketahui oleh saya. Apakah itu artefak atau diharapkan?$PATH
masalah seperti yang Anda nyatakan. Hal-hal berfungsi seperti sebelumnya ketika saya gunakan/usr/local/bin/psql
untuk mengakses database. Baik Lion tidak memiliki sistem PostgreSQL atau $ PATH saya diatur secara berbeda. Sudah setahun sejak terakhir kali aku kacau dengan ini jadi aku tidak ingat persis. Sedangkan untuk pengguna Unix ... dengan instalasi PostgreSQL Homebrew, server diluncurkan oleh launchd dan pengguna disetel ke pengguna lokal yang menginstalnya, sebagai default. Berbagai hal diatur secara berbeda pada Mac OS X Server yang memulai PostgreSQL secara otomatis di bawahpostgres
.Saya tidak tahu ada file konfigurasi untuk klien psql. Namun psql menghormati sejumlah variabel lingkungan yang berkorelasi dengan opsi baris perintah.
Jadi untuk memiliki psql secara otomatis menggunakan soket pilihan Anda, Anda dapat mengatur variabel PGHOST ke direktori yang berisi soket. yaitu
sumber
Mencoba:
atau
sumber
Terlambat, tetapi saya menemukan ini membantu: http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion
Itu untuk Lion, tetapi saya mengalami masalah yang sama dengan yang ada di utas ini setelah memutakhirkan dari 10.6.8 ke Mountain Lion dan menginstal PostgreSQL via HomeBrew sebelumnya pada 10.6.8. Saya juga punya
/var/pgsql_socket_alt
folder post-upgrade misterius , tapi saya baru saja menghapusnya dan dibuat/var/pgsql_socket
seperti yang disarankan oleh @wolftron. Namun, itu bukan solusi terakhir.Jika saya dibiarkan
unix_socket_directory
kosong / dikomentaripostgresql.conf
, proyek apa pun yang ada sebelum peningkatan akan mengeluh bahwa soket masuk/var/pgsql_socket
tidak ada. Tetapi jika saya mengganti conf dan hard-codedvar/pgsql_socket
, setiap proyek baru akan mengeluh bahwa soketnya/tmp
hilang. Sangat frustasi ... sampai saya menginstal ulangpg gem
di proyek pra-10.8 (gem uninstall pg && gem install pg
) dan meninggalkanunix_socket_directory
komentar dalamconf
file. Setelah cepatpg_ctl
untuk me-restart server, proyek-proyek baru dan lama berhasil. Soket pgsql saya hidup/tmp
sekarang, fwiw.Sidenote: jika Anda menggunakan
activerecord-postgresql-adapter
permata, hapus instalan terlebih dahulu, lalu instal ulang pg, lalu instalactiverecord-postgresql-adapter
lagi.sumber
Saya baru saja mendaftar ke dba SE, jadi sepertinya tidak dapat mengomentari posting yang relevan (apa yang tempayan!).
Namun, saya yakin bahwa saya berada di kapal yang sama dengan @ thure. Saya telah memastikan / usr / local / bin lebih awal di PATH saya daripada / usr / bin, telah memeriksa biner mana yang telah diacak oleh shell
which
dantype
, dll.Saya melihat gejala yang sama dengan @thure. Kemudian saya memiliki pencerahan; Saya menyadari bahwa saya akan membangun kembali
pg
permata (saya menggunakan Ruby) di shell yang PATH-nya telah dipengaruhi oleh path_helper Mac (yang dijalankan dari / etc / profile dan menempatkan / usr / bin sebelum / usr / local / bin) .Saya menghapus pg dan menginstalnya kembali di shell yang PATH-nya benar. Tiba-tiba saya bisa terhubung!
Jadi pastikan Anda mengkompilasi ulang bahasa Anda mengikat orang, dan biarkan mereka menemukan salinan yang benar (mungkin)
pg_config
.sumber
Saya menemukan jawaban ini: https://stackoverflow.com/questions/10763143/in-rails-couldnt-create-database-for-adapter-postgresql Dan, sesederhana itu, itu berfungsi untuk saya ... jalankan
$bundle update
dan mulai bekerja lagi.sumber
Saya menemukan bahwa menghubungkan lokasi aktual ke lokasi yang diharapkan berfungsi dengan baik:
sepanjang baris jawaban yang diterima oleh @ thure tetapi lebih sederhana.
sumber
Ini dia, 2016, El Capitan ada di luar sana, dan Apple terus mengubah keadaan. Postgres diinstal sebagai bagian dari OS, dan file konfigurasi postgres menetapkan properti unix_socket_directories di postgresql.conf ke / tmp. Soketnya ada di /tmp/.s.PGSQL.5432. Saya dapat mengatasi masalah dengan menjalankan yang berikut:
Semoga ini bisa membantu seseorang.
sumber
Cari file socket yang benar
Dari hasil mendapatkan path ke file dan gunakan path dengan parameter "-h" dalam perintah psql
Sebagai contoh, ini adalah cara saya terhubung ke database Server Kalender dan Kontak macOS (dalam sesi ssh ke server):
Kemudian, file soket di jalur akan digunakan untuk terhubung.
sumber
Secara default postgres tampaknya mencoba untuk terhubung melalui unix-domain-sockets. SOCKET DOMAIN UNIX
Ini terjadi pada saya ketika saya menjalankan instance postgres di buruh pelabuhan. Anda harus melihat jenis koneksi apa yang diterima server Anda. Bagi saya itu jelas TCP dan bukan unix soket domain.
Menambahkan tanda untuk menerima host mengarahkan koneksi ke jalur yang benar dan memperbaiki masalah.
PS: Soket domain Unix berfungsi pada level kernel dan koneksi tidak harus melalui semua jazz yang diperlukan untuk koneksi TCP. Mereka sangat cepat dan efisien ketika Anda ingin membuat koneksi ke mesin Anda sendiri dari proses yang berbeda sebagai bagian dari Komunikasi Interprocess.
sumber
Halo dunia :)
Cara terbaik tetapi aneh bagi saya adalah melakukan hal-hal selanjutnya.
1) Unduh postgres93.app atau versi lain. Tambahkan aplikasi ini ke / Aplikasi / folder.
2) Tambahkan baris (perintah) ke dalam file
Ini adalah PATH.bash_profile
(yang ada di direktori home saya):psql
dariPostgres93.app
. Baris (perintah) berjalan setiap kali konsol dimulai.3) Luncurkan
Postgres93.app
dari/Applications/
folder. Ini memulai server lokal (port adalah "5432" dan host adalah "localhost").4) Setelah semua manipulasi ini saya senang menjalankan
$ createuser -SRDP user_name
dan perintah lainnya dan melihat bahwa itu berhasil!Postgres93.app
dapat dibuat untuk dijalankan setiap kali sistem Anda mulai.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 cantikTentu saja, ini hanya bermanfaat untuk server lokal. Saya akan senang jika instruksi ini membantu orang lain yang menghadapi masalah ini.
sumber
Saya tidak dapat dengan cepat menemukan tautan tempat saya menemukan nugget ini, tetapi itu berhasil untuk saya.
ekspor PGHOST = localhost
Oh, ini tautannya. https://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser
sumber
Saya mendapat kesalahan yang sama dari mencoba menjalankan
psql
pada baris perintah. Ternyata solusi saya jauh lebih sederhana. Saya salah mengonfigurasi port mendengarkan di file konfigurasi: /etc/postgresql/9.4/main/postgres.conf . Saya telah mengubah port dari port = 5432 ke port = 5433. Ketika saya mengubahnya kembali ke 5432, itu berfungsi seperti yang diharapkan.Untuk menguji apakah Anda telah melakukan sesuatu yang serupa, Anda dapat menjalankan.
$ psql -p5433
Ada sejumlah opsi berguna seperti ini untuk perintah psql yang dapat Anda temukan di sini: http://www.postgresql.org/docs/9.4/static/app-psql .html sehingga Anda dapat menguji kesalahan konfigurasi SENDIRI Anda sendiri. Tentu saja, Anda cukup menghapus set perubahan konfigurasi terakhir Anda dari file * .conf, juga untuk menguji apakah itu adalah sumber masalah Anda. Saya pikir itu pasti patut dicoba sebelum Anda muck tentang dengan izin file dan kepemilikan. (Jangan lupa untuk/etc/init.d/postgresql restart
)Apa yang saya TIDAK bisa temukan adalah file konfigurasi yang menetapkan nilai default untuk perintah psql CLI. Bisakah seseorang mengomentari hal itu?
Bagi saya, saya selalu kembali ke prinsip pertama pemrograman: "Saya biasanya sumber kesalahan yang diberikan!"
sumber