webdevqa.jp.net

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

最近、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"?

何が起こっているかもしれないアイデアは非常に役立つでしょう!ありがとう!

196
Dave G

これはPATHの問題です。 Mac OSX Lionでは、現在システムにPostgresqlが含まれています。 which psqlを実行すると、HomeBrewの正しい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を使用してファイルをソースすると、再びOKになります。

291
John Wang

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

Host: localhost

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

90
Dave G

私はMountain Lionでこの問題を抱えていましたが、私のために働いたのは この修正 だけでした。

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

Sudo find / -name .s.PGSQL.5432

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

mkdir /var/pgsql_socket/

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

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

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

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

46
Ben

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

gem pristine pg

問題は(部分的に)pg gem自体にあるようです。ビルド時に、ドメインソケットの場所を特定します。ドメインソケットの場所を変更した後、gemを再構築するまで有効にならないようです。

29
Darren

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

psql -h localhost -U postgres
15
Rogerio

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

gem uninstall pg

次に再インストールします。

それが機能しました。

5
vladiim

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

/opt/local/lib/postgresql91 

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

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

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

3
Antony Stubbs

私もこれに遭遇しましたが、私はpostgresを(homebrewではなく)自分でインストールしていました。その場合、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へのJohn Wangの提案は、後でそれをbash_rcに追加することは黄金色です。

3
tjarratt

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

このサイト 同僚が見つけたソリューションの詳細。その結果、単一のシェルスクリプトを実行することになります。

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

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

1
Eric Hu

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

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

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

1
mike

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

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

0
Ortwin Gentz

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

Wozが正しいようです。MacbookProの蓋を閉じるたびにクラッシュするからです。クラッシュ後の動作は次のとおりです。

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

私はRailsを初めて使用しますが、次のコードをdatabase.ymlに追加するとうまくいきました。

Host: localhost

port: 5432

RailsがデフォルトではTCPではなくドメインソケットになっているのは不明ですが、PostgreSQLはデフォルトではドメインソケットを設定しません。

0
Ken Freeman

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

0
user618589

$ 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
gylow