OSX 10.7 Lionへのアップグレード後のPostgresqlの修復


196

最近、OSX 10.7にアップグレードしました。この時点で、psqlサーバーに接続しようとすると、レールのインストールが完全に中断しました。コマンドラインからそれを使用すると

psql -U postgres

それは完全にうまくいきますが、同じユーザー名とパスワードでrailsサーバーまたはコンソールを実行しようとすると、このエラーが発生します

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

何が起こっているのかどんなアイデアも非常に役に立ちます!ありがとう!


これも私のオフィスの誰かを襲った。間違ったバイナリを取得することで同様の問題があり、別のディレクトリにある別のディレクトリのドメインソケットに接続しようとすると、別の問題が発生しました。アップグレードはローカルデータベースのすべてのデータを食べたようです。幸いなことに、これは単なる開発用の箱だったので、大したことではありませんが、やや不快です。:)

1
今日私はこれに当たって、昨日あなたの質問を読んだことを思い出しました。@John Wangが出てそれを説明したのを見るのはうれしい:)
Ryan Bigg

回答:


291

これはPATHの問題です。Mac OSX Lionは現在システムにPostgresqlを含んでいます。あなたが行う場合which psql、あなたはおそらくわかりますusr/bin/psqlの代わりにusr/local/bin/psql自作の正しいものです。実行brew doctorするusr/local/binと、PATH環境変数の先頭に追加する必要があることを示すメッセージが表示されます。

.bash_profileまたは.profile、または使用しているシェルを編集して追加します。 export PATH=/usr/local/bin:$PATH

の最初のエクスポートとして、PATHシェルセッションを終了するか、ファイルのソースを指定しますsource ~/.bash_profile。これで、再び問題なく動作するはずです。


12
これはそれを修正しました。/ etc / pathsを編集して、/ usr / local / binが一番上にあることを確認することもできます
Greg

153
また、パスを修正する前にpg gemをインストールした場合、間違ったpsqlが使用されることに注意してください。その場合は、pg gemをアンインストールしてから再インストールします(gem uninstall pg && gem install pg)。
トロイ

4
これは自作ですか?/ opt / local / lib / postgresql91なので、Portsは次のように配置しているようです。したがって、必ずエクスポートPATH = / opt / local / lib / postgresql91 / bin:$ PATHを使用してください
Antony Stubbs

1
私のパスは正しく報告されていましたが、pg gemをアンインストールしてから、バンドラーを再インストールするというトロイの解決策でうまくいきました。
トムハリソン

2
明確にするために-パスを正しく設定するのが最善のように見え、pg gemをアンインストール/再インストールする
Jamie Cook

90

興味のある方のために、解決策をまとめました。追加するだけで

host: localhost

私の環境のdatabase.ymlに、すべてが肉汁でした。


9
これに注意してください。この設定は、ドメインソケットからTCP接続へのアクセスを変更します。おそらく機能しますが、マシンのパフォーマンスと使用可能なポートが少し失われる可能性があり、セットアップによっては問題になる可能性があります。ジョンによって提供されたソリューションは正しいです。
ピリフ

3
「gem uninstall pg」(すべてのバージョンを選択)、次に「bundle」して、Gemfileからpgバージョンをインストールしてください。
tmadsen 2012年

Dave Gに感謝します。これも私にとってうまくいきました。10.7.3のアップデートをインストールし、db:migrateをすくいました。これはそれを修正しました。
Sathish 2012年

これも私にとってはうまくいきました。ただし、パスワードとユーザー名は空白のままにしました。
ベンジャミン

TCP / IP接続を強制するので、これは機能すると思います。
duma

46

私はマウンテンライオンに非常に問題がありましたが、私のために働いた唯一のことはこの修正でした:

実際のターゲットがどこにあるかを確認します。

sudo find / -name .s.PGSQL.5432

このディレクトリを作成する必要がありました:

mkdir /var/pgsql_socket/

次に、上記の検索の結果を使用して、このシンボリックリンクを作成します。

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

Mountain Lionのほとんどの人にとって、ディレクトリを作成してシンボリックリンクを作成するだけで、シンボリックリンクが機能しない場合を除き、検索に時間を費やすことはないと思います。

PS-私のPostgreSQLは公式インストーラーを介してインストールされました。


私にはそれでいいのではないかと感じていますが、うまく機能させることができません。私はこれを取得しています:ln:/ var / pgsql_socket /:そのようなファイルまたはディレクトリはありません
Emmanuel

すみません、私もそれに遭遇したことを忘れていました。答えるために追加のステップを追加しました。
ベン

ベンを祝福してください。大変感謝しています。
Matt

29

パスを変更した後も問題が解決しない場合は(私が行ったように)、これも試してください...

gem pristine pg

問題は(部分的に)pg gem自体にあるようです。ビルドすると、ドメインソケットの場所がわかります。事後ドメインソケットの場所を変更した場合、gemを再構築するまで効果が無いようです。


これは、PATHを修正してpg gemをそのままの状態で再インストールした後でも機能しました。
Elliot Winkler

このヒントをありがとう、Darren
2013年

15

公式インストーラーから直接インストールした場合は、コマンドにホストを追加するだけでパスを変更せずに機能します。

psql -h localhost -U postgres

5

私は同じ問題を抱えており、ジョン・ワンのソリューションを機能させるのに問題を抱えていました。Darrenが指摘したように、pg gemには問題があります。それを機能させるために、私は以下をする必要がありました:

gem uninstall pg

その後、再インストールします。

うまくいきました。


これを2回実行する必要がありました... pgをアンインストールしてからバンドルインストールしましたが、失敗しました。次に、gem install pgを実行しただけです。ありがとう!
ダスティン

3

私もこれに遭遇しましたが、自分でpostgresをインストールしました(自作ではありません)。その場合は、psqlへの古いパス(/ usr / local / binでもかまいませんが、/ usr / local / pgsql / binでした)を見つけて、$ PATHの前に追加する必要があります。

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

(修正)export PATH = / usr / local / psql / bin:$ PATH

(後) `which psql '=> / usr / local / psql / bin

John Wangがsource ~/.bash_rc後でbash_rcに追加するという提案は、すばらしいものです。



1

@pilifで指摘されているように、OSユーザー固有であるか、ドメインソケットの代わりにTCPを使用するようにPostgresを再マッピングするため、最も支持されている回答には満足していません。コアシステムパスの前にBrewのパスをチェックするためにシステムレベルでデフォルトパスを並べ替える別の解決策を見ましたが、これはこのような他のすべてのアプリケーション名の衝突に影響を与える可能性があるため危険なようです。

このサイトでは、同僚が見つけたソリューションについて詳しく説明しています。1つのシェルスクリプトを実行することになります。

  1. Postgres 8.4ファイルを別のディレクトリにバックアップする
  2. 醸造所によるPostgresのインストールのシンボリックリンク

これには、システムのデフォルトのPostgresがインストール済みの任意のbrewであるという警告が付属しているため、それが適切かどうかを判断する必要があります。特に9.xよりもPostgres 8.4が必要だとは思わないが、YMMV


1

私のために働いた別の可能な解決策は、postmasterファイルを削除してリセットすることです。単に実行する:

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

ここで見つけることができるエラーのためにログをチェックする価値があります:

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

私が持っていたエラーメッセージは:

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

その後、すべてがうまくいきました。


コマンドラインからのみ問題が発生しました。ファイル/usr/local/var/postgres/postmaster.pidを削除すると、問題が解決しました。
マイケルA.

0

私の場合、共有メモリの設定が間違っているため、サーバーが起動しませんでした。最初はいくつかのpostgresプロセスが実行されていたので混乱しましたが、それらは標準のシステムプロセスでした。探すpostmasterプロセスを!

共有メモリの設定変更するだけで済みました。私の場合、パス設定をいじる必要はありませんでした。



0

$ PATHを永続的に変更したい場合は、次のようにしてください。

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

これにより、が書き換えられます~/.MacOSX/environment.plist


0

Railsは初めてですが、database.ymlに以下を追加するとうまくいきました。

host: localhost

port: 5432

RailsがデフォルトでTCPではなくドメインソケットを使用するのはなぜかわかりませんが、PostgreSQLではデフォルトでドメインソケットが設定されません。


0

私のPostgreSQLは/ Library / PostgreSQLにインストールされているので、/ usr / varが機能しません。

Macbook proの蓋を閉じるたびにクラッシュするため、Wozは正しいようです。クラッシュ後の動作は次のとおりです。

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.