195

最近、OSX 10.7 にアップグレードしたところ、psql サーバーに接続しようとすると Rails のインストールが完全に失敗しました。を使用してコマンドラインから実行すると

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

何が起こっているのかについてのアイデアは、非常に役立ちます! ありがとう!

4

15 に答える 15

290

これはPATHの問題です。Mac OSX Lionには、現在システムにPostgresqlが含まれています。実行すると、HomeBrewの正しいものの代わりにwhich psql表示される可能性があります。実行すると、PATH環境変数の先頭に追加する必要があることを示すメッセージが表示されます。usr/bin/psqlusr/local/bin/psqlbrew doctorusr/local/bin

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

の最初のエクスポートとして、PATHシェルセッションを終了するか、ファイルをソースとして使用しますsource ~/.bash_profile。これで、再びOKになります。

于 2011-07-21T07:17:54.970 に答える
90

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

host: localhost

私の環境のdatabase.ymlに、すべてグレービーでした。

于 2011-07-21T02:36:11.093 に答える
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 は公式のインストーラーからインストールされました。

于 2012-07-26T22:29:48.967 に答える
29

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

gem pristine pg

問題は (部分的に) pg gem 自体にあるようです。ビルド時に、ドメイン ソケットがどこにあるべきかを判断します。事後にドメイン ソケットの場所を変更すると、gem を再構築するまで有効にならないようです。

于 2011-11-29T07:07:46.447 に答える
15

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

psql -h localhost -U postgres
于 2011-07-23T20:45:43.273 に答える
5

私は同じ問題を抱えていて、John Wang のソリューションを機能させるのに問題がありました。Darren が指摘したように、pg gem には問題があります。それを機能させるには、次のことが必要でした。

gem uninstall pg

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

それはそれを機能させました。

于 2011-12-10T04:01:53.630 に答える
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

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

于 2011-07-22T16:55:07.593 に答える
3

これは自作用ですか?ポートはそれを入れているようです:

/opt/local/lib/postgresql91 

したがって、必ずエクスポートを使用してください

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

Mac ポートの問題: https://trac.macports.org/ticket/30125

于 2011-11-23T20:53:06.863 に答える
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"?

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

于 2012-10-03T00:35:00.140 に答える
1

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

このサイトでは、同僚が見つけた解決策について詳しく説明しています。結局のところ、単一のシェルスクリプトを実行することになります

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

これには、システムのデフォルトのPostgresがbrewがインストールしたものであるという警告が伴うため、それがあなたにとって正しいかどうかについて判断を下す必要があります. 特に9.x以上でPostgres 8.4が必要だとは思いませんが、YMMV

于 2012-01-17T02:51:40.200 に答える
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

于 2012-01-20T16:05:53.130 に答える
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"
于 2015-01-27T17:47:38.667 に答える
0

データベースのホストを指定する必要がある場合があります。

于 2012-10-03T18:13:24.313 に答える
0

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

host: localhost

port: 5432

Rails がデフォルトで TCP ではなくドメイン ソケットを使用する理由がわかりませんが、PostgreSQL はデフォルトでドメイン ソケットをセットアップしません。

于 2014-08-15T21:44:16.523 に答える
0

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

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

于 2011-12-23T10:59:16.723 に答える