Memperbaiki Postgresql setelah memutakhirkan ke OSX 10.7 Lion

196

Saya baru-baru ini ditingkatkan ke OSX 10.7, di mana instalasi rel saya sepenuhnya borked ketika mencoba terhubung ke server psql. Ketika saya melakukannya dari baris perintah menggunakan

psql -U postgres

ini berfungsi dengan sangat baik, tetapi ketika saya mencoba menjalankan server rel atau konsol dengan nama pengguna dan kata sandi yang sama, saya mendapatkan kesalahan ini

...activerecord-3.0.9/lib/active_record/connection_adapters/postgresql_adapter.rb:950:in `initialize': could not connect to server: Permission denied (PGError) 
Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Gagasan apa pun yang mungkin terjadi akan sangat membantu! Terima kasih!

Dave G
sumber
Ini juga mengenai seseorang di kantor saya; kami memiliki masalah serupa dengan mendapatkan biner yang salah, masalah tambahan dengan mencoba menyambung ke soket domain di direktori yang berbeda dengan izin yang berbeda, dan sepertinya pemutakhiran memakan semua data pada database lokal. Untungnya ini hanya kotak pengembangan, jadi ini bukan masalah besar, tapi agak menjengkelkan. :)
1
Saya memukul yang ini sendiri hari ini dan ingat membaca pertanyaan Anda kemarin. Senang melihat @John Wang telah keluar dan menjelaskannya :)
Ryan Bigg

Jawaban:

291

Ini masalah PATH. Mac OSX Lion menyertakan Postgresql dalam sistem sekarang. Jika Anda melakukan which psqlAnda mungkin akan melihat usr/bin/psqlbukan usr/local/bin/psqlyang merupakan salah satu yang benar homebrew ini. Jika Anda menjalankan brew doctorAnda harus mendapatkan pesan yang menyatakan bahwa Anda perlu menambahkan usr/local/binke kepala variabel env PATH Anda.

Mengedit .bash_profile atau .profile Anda, atau shell mana pun yang Anda gunakan dan menambahkan: export PATH=/usr/local/bin:$PATH

sebagai ekspor pertama untuk PATHkemudian keluar dari sesi shell Anda atau sumber file Anda dengan source ~/.bash_profiledan sekarang harus OK lagi.

John Wang
sumber
12
Ini memperbaikinya. Anda juga dapat mengedit / etc / paths dan memastikan / usr / local / bin ada di atas
Greg
153
Juga, perhatikan bahwa jika Anda menginstal pg gem SEBELUM memperbaiki jalur Anda, itu akan menggunakan psql yang salah. Jika demikian, hapus instalan pg gem dan instal ulang (instal gem pg && gem instal pg).
Troy
4
Apakah ini untuk homebrew? Port sepertinya memasukkannya ke: / opt / local / lib / postgresql91 Jadi pastikan Anda menggunakan PATH ekspor = / opt / local / lib / postgresql91 / bin: $ PATH
Antony Stubbs
1
Jalur saya melaporkan dengan benar, tetapi solusi Troy menghapus instalan permata pg, lalu membiarkan bundler menginstal ulang melakukan trik untuk saya.
Tom Harrison
2
Hanya untuk memperjelas - sepertinya Anda yang terbaik untuk mengatur jalur Anda dengan benar, kemudian copot / instal ulang permata pg
Jamie Cook
90

Bagi Anda yang tertarik, saya menyatukan solusinya. Yang saya butuhkan hanyalah menambahkan

host: localhost

ke database.yml untuk lingkungan saya dan semuanya adalah saus.

Dave G
sumber
9
hati-hati dengan ini: Pengaturan ini mengubah akses dari soket domain ke koneksi TCP. Meskipun mungkin berhasil, Anda mungkin kehilangan sedikit kinerja dan port yang dapat digunakan pada mesin Anda yang bisa menjadi masalah tergantung pada pengaturan Anda. Solusi yang diberikan oleh John benar.
pilif
3
'gem uninstall pg' (pilih semua versi), lalu 'bundel' lagi untuk menginstal versi pg dari Gemfile Anda bekerja untuk saya.
tmadsen
Terima kasih Dave G, ini berhasil juga untuk saya. Saya menginstal pembaruan 10.7.3 dan menyapu db: bermigrasi mengeluh. Ini memperbaikinya.
Sathish
Ini juga berhasil bagi saya. Namun saya membiarkan kata sandi dan nama pengguna kosong.
Benjamin
Saya membayangkan ini akan berhasil karena memaksa koneksi TCP / IP.
Duma
46

Saya memiliki masalah dengan Mountain Lion ini tetapi satu-satunya hal yang berhasil bagi saya adalah perbaikan ini :

Periksa di mana target sebenarnya:

sudo find / -name .s.PGSQL.5432

Saya perlu membuat direktori ini:

mkdir /var/pgsql_socket/

Kemudian gunakan hasil dari find di atas buat symlink ini:

ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

Saya menduga bahwa bagi kebanyakan orang di Mountain Lion Anda bisa membuat direktori dan melakukan symlink dan tidak membuang waktu untuk melakukan pencarian kecuali symlink tidak berfungsi.

PS - PostgreSQL saya dipasang melalui penginstal resmi.

Ben
sumber
Saya punya perasaan itu mungkin untuk saya tetapi tidak bisa membuatnya bekerja. Saya mendapatkan ini: ln: / var / pgsql_socket /: Tidak ada file atau direktori seperti itu
Emmanuel
Maaf, saya lupa bahwa saya juga menabraknya. Menambahkan langkah ekstra untuk menjawab.
Ben
Berkatilah kamu, Ben. Sangat dihargai.
Matt
29

Jika masalah tetap terjadi setelah mengubah jalur (seperti yang terjadi pada saya), coba juga ini ...

gem pristine pg

Tampaknya masalahnya (sebagian) terletak pada permata pg itu sendiri. Ketika membangun, ia mencari tahu di mana soket domain seharusnya. Jika Anda mengubah lokasi soket domain setelah fakta itu tampaknya tidak berpengaruh sampai Anda membangun kembali permata.

Darren
sumber
Ini bekerja untuk saya, bahkan setelah saya memperbaiki PATH dan menginstal ulang permata pg tanpa murni.
Elliot Winkler
Terima kasih atas tip ini, Darren
bhinks
15

Bagi mereka yang menginstal langsung dari installer resmi, hanya menambahkan host ke perintah berfungsi tanpa perubahan jalur:

psql -h localhost -U postgres
Rogerio
sumber
5

Saya memiliki masalah yang sama dan mengalami masalah dalam membuat solusi John Wang berhasil. Seperti yang dicatat Darren, ada masalah dengan permata pg. Untuk membuatnya bekerja, saya perlu:

gem uninstall pg

Kemudian pasang kembali.

Yang membuatnya bekerja.

vladiim
sumber
Saya harus menjalankan ini dua kali ... aneh. Saya melakukan uninstall pg kemudian bundel instal dan gagal. Kemudian baru saja menginstal permata pg dan itu berhasil. Terima kasih!
Dustin
3

Saya juga mengalami hal ini, tetapi saya sendiri sudah menginstal postgres (bukan dengan homebrew). Jika itu masalahnya, Anda perlu menemukan path lama ke psql (yang mungkin / usr / local / bin, tapi bagi saya adalah / usr / local / pgsql / bin) dan tambahkan itu ke $ PATH Anda.

(sebelum) which psql=> / usr / bin / psql

(perbaiki) ekspor PATH = / usr / local / psql / bin: $ PATH

(setelah) `yang psql '=> / usr / local / psql / bin

Saran John Wang untuk source ~/.bash_rcsesudahnya Anda menambahkan itu ke bash_rc Anda berwarna emas.

tratratt
sumber
3

Apakah ini untuk homebrew? Port tampaknya memasukkannya ke dalam:

/opt/local/lib/postgresql91 

Jadi, pastikan Anda menggunakan ekspor

PATH=/opt/local/lib/postgresql91/bin:$PATH

Masalah port Mac: https://trac.macports.org/ticket/30125

Antony Stubbs
sumber
1

Saya tidak senang dengan jawaban yang paling banyak dipilih karena mereka adalah OS-user spesifik atau mem-postap Postgres untuk menggunakan TCP alih-alih soket domain, seperti ditunjukkan oleh @pilif. Saya telah melihat solusi lain yang melibatkan pemesanan ulang jalur default di tingkat sistem untuk memeriksa jalur Brew sebelum jalur sistem inti, tetapi ini tampaknya berbahaya karena dapat mempengaruhi semua nama-tabrakan aplikasi lain seperti ini.

Situs ini merinci solusi yang ditemukan oleh rekan kerja saya. Itu datang untuk mengeksekusi skrip shell tunggal yang akan

  1. buat cadangan file Postgres 8.4 di direktori terpisah
  2. simlink pemasangan Postgres buatan brew

Ini datang dengan peringatan bahwa sistem default Postgres adalah apa pun minuman yang telah diinstal, jadi Anda harus membuat panggilan penilaian tentang apakah itu tepat untuk Anda. Saya tidak melihat diri saya membutuhkan Postgres 8.4 khusus lebih dari 9.x, tetapi YMMV

Eric Hu
sumber
1

Solusi lain yang mungkin berhasil bagi saya adalah mengatur ulang file postmaster dengan menghapusnya. Cukup jalankan:

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

Ada baiknya memeriksa log untuk kesalahan yang dapat Anda temukan di sini:

/usr/local/var/postgres/server.log

Pesan kesalahan yang saya alami adalah:

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 161) running in data directory 
"/usr/local/var/postgres"?

Semuanya bekerja dengan baik sesudahnya.

mike
sumber
Saya memiliki masalah hanya dari baris perintah. Menghapus file /usr/local/var/postgres/postmaster.pid memecahkan masalah saya.
Michael A.
0

Dalam kasus saya server tidak memulai karena pengaturan memori bersama yang salah. Pada awalnya saya bingung karena ada beberapa proses postgres yang berjalan, tetapi itu adalah proses sistem standar. Cari postmasterproses!

Yang perlu saya lakukan adalah mengubah pengaturan memori bersama . Mengotak-atik pengaturan jalur tidak diperlukan dalam kasus saya.

Ortwin Gentz
sumber
0

Anda mungkin perlu menentukan host database Anda.

pengguna618589
sumber
0

Jika Anda menyukai perubahan permanen pada $ PATH Anda, coba ini:

defaults write $HOME/.MacOSX/environment PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/local/bin"

ini akan menulis ulang ~/.MacOSX/environment.plist.

Gylow
sumber
0

Saya baru mengenal Rails, tetapi menambahkan yang berikut ke database.yml bekerja untuk saya:

host: localhost

port: 5432

Tidak yakin mengapa Rails default ke soket domain, bukan TCP, sedangkan PostgreSQL tidak mengatur soket domain secara default.

Ken Freeman
sumber
0

PostgreSQL saya diinstal di / Library / PostgreSQL sehingga / usr / var tidak berfungsi untuk saya.

Tampaknya Woz benar karena setiap kali saya menutup tutup macbook pro saya macet ... Inilah yang berfungsi pascab crash bagi saya:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
sethmuss
sumber