最近、私のマシンをMac OS X Lion(10.7.4)からMountain Lion(10.8)に更新しましたが、PostgreSQLのインストールが失敗したと思います。もともとHomebrewを介してインストールされました。私はDBAではありませんが、トラブルシューティングの方法を誰かに教えてもらえれば幸いです。
接続できません(ただし、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"?
しかし、Postgresはまだ明らかに動いています。
$ 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
そして、ローカルからのクエリ(テストデータベースと開発データベースの両方)に応答していますRails app
User Load (0.2ms) SELECT "users".* FROM "users"
Rendered users/index.html.haml within layouts/application (1.3ms)
ないようです/var/pgsql_socket/
ディレクトリはもちろん、/var/pgsql_socket/.s.PGSQL.5432
上記のソケットファイル!?!たぶん、Mountain Lionのインストールがそれを一掃したのでしょうか?
$ ls -l /var/ | grep pg
drwxr-x--- 2 _postgres _postgres 68 Jun 20 16:39 pgsql_socket_alt
これをトラブルシューティングするにはどうすればよいですか?
私は非常に似た問題を抱えていることを発見しました。つまり、postgresが/var/pgsql_socket_alt
でソケットを開いていたため、私のソフトウェアはどれも期待していませんでしたが、私の問題の解決策は$PATH
の問題だけではありませんでした。
私はディレクトリ/var/pgsql_socket
を作成し、それを自分で所有し、unix_socket_directory
内のpostgresql.conf
(/usr/local/var/postgres
にある)をそのディレクトリに設定し、pg_ctl
内の/usr/local/bin
バイナリを使用して適切なpostgresサーバーを正常に起動しなければなりませんでした($PATH
が入ってくるところです–メイク) which pg_ctl
が/usr/local/bin/pg_ctl
に解決されることを確認するか、常に明示的に呼び出します)。
これは、/var/pgsql_socket_alt
の言及を介してこの質問を見つけた他のユーザーに役立つ場合があります。
もっともらしい典型的な説明は、homebrewに付属するpsql
が/usr/local/bin/psql
にあり、/usr/bin/psql
(OSにバンドルされている)のように$ PATHにあるものとは異なるということですバツ)。フルパスで試してみてください:
$ /usr/local/bin/psql -U Rails -d myapp_development
また、あなたの質問のps
出力にはかなり珍しいものがあります:postgresサーバーはmeltemi
Unixユーザーの下で実行されていますが、通常、専用のpostgres
Unixユーザーが使用されていますそのため。
私は、psqlクライアントの設定ファイルを知りません。ただし、psqlはコマンドラインオプションに関連するいくつかの環境変数を尊重します。
そのため、psqlが選択したソケットを自動的に使用するようにするには、PGHOST変数をソケットを含むディレクトリに設定します。つまり.
PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase
試してください:
psql -U Rails -d myapp_development -h localhost
または
psql -U Rails -d myapp_development -h 127.0.0.1
遅くなりましたが、これは役に立ちました: http://tammersaleh.com/posts/installing-postgresql-for-Rails-3-1-on-lion
それはLionに関するものでしたが、10.6.8からMountain Lionにアップグレードし、以前10.6.8にHomeBrewを介してPostgreSQLをインストールした後、このスレッドの問題と同じ問題が発生していました。また、アップグレード後に不可解な/var/pgsql_socket_alt
フォルダーがありましたが、@ wolftronの提案どおりに削除して/var/pgsql_socket
を作成しました。しかし、それは最終的な解決策ではありませんでした。
unix_socket_directory
を空白にしたり、postgresql.conf
にコメントアウトしたりすると、アップグレード前に存在していたすべてのプロジェクトで、/var/pgsql_socket
のソケットが見つからないというメッセージが表示されます。しかし、confを変更してvar/pgsql_socket
をハードコーディングした場合、新しいプロジェクトは/tmp
のソケットが欠落していると文句を言うでしょう。 10.8より前のプロジェクト(pg gem
)にgem uninstall pg && gem install pg
を再インストールし、unix_socket_directory
をconf
ファイルにコメントアウトするまで、非常にイライラしました。サーバーを再起動するための迅速なpg_ctl
の後で、新旧両方のプロジェクトが機能しました。私のpgsqlソケットは現在/tmp
にあります、fwiw。
補足:activerecord-postgresql-adapter
gemを使用している場合は、まずアンインストールしてからpgを再インストールし、次にactiverecord-postgresql-adapter
を再インストールしてください。
私はdba SEにサインアップしたばかりなので、関連する投稿にコメントすることができないようです(なんてこった!)。
しかし、私は@thureと同じ船に乗っていると確信していました。/usr/local/binがPATH内で/ usr/binよりも前にあること、シェルがwhich
およびtype
などでハッシュしたバイナリを確認していることを確認しました。
@thureと同じ症状が出ました。それから私はひらめきを持っていました。 Macのpath_helper(/ etc/profileから実行され、/の前に/ usr/binを置く)によってPATHが悪影響を受けているシェルでpg
gem(Rubyを使用しています)を再構築したことに気付きましたusr/local/bin)。
Pgをアンインストールし、PATHが正しいシェルに再インストールしました。突然接続できました!
したがって、言語バインディングを再コンパイルして、(おそらく)pg_config
の正しいコピーを見つけられるようにしてください。
2016年、El Capitanが登場し、Appleは常に変化しています。PostgresはOSの一部としてインストールされており、postgres設定ファイルはpostgresql.confのunix_socket_directoriesプロパティを設定していますソケットは/ tmpにあります。ソケットは/tmp/.s.PGSQL.5432にあります。次のコマンドを実行することで問題を回避できました。
Sudo ln -s /tmp /var/pgsql_socket
これが誰かを助けることを願っています。
実際の場所と予想される場所のシンボリックリンクがうまく機能することがわかりました。
Sudo ln -s /var/pgsql_socket_alt /var/pgsql_socket
@thureによって受け入れられた回答の線に沿って、しかしより簡単です。
このナゲットを見つけたリンクをすぐに見つけることはできませんが、私にとってはうまくいきました。
pGHOST = localhostのエクスポート
ああ、ここにリンクがあります。 https://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser
正しいソケットファイルを探します
find / -name .s.PGSQL.5432 -ls
結果からファイルへのパスを取得し、psqlコマンド内の「-h」パラメーターでパスを使用します
たとえば、これは(サーバーへのsshセッション内で)macOSサーバーの予定表と連絡先データベースに接続する方法です。
Sudo psql -U _calendar -h /private/var/run/caldavd/PostgresSocket/ -d caldav
次に、パスにあるソケットファイルを使用して接続します。
私はこの答えを見つけました: https://stackoverflow.com/questions/10763143/in-Rails-couldnt-create-database-for-adapter-postgresql そして、それは単純だったので、私... $bundle update
そしてそれは再び働き始めました。
デフォルトでは、postgresはunix-domain-sockets経由で接続しようとしているようです。 NIXドメインソケット
これは、Dockerでpostgresインスタンスを実行していたときに起こりました。サーバーが受け入れる接続の種類を確認する必要があります。私にとってそれは明らかにTCPであり、UNIXドメインソケットではありませんでした。
ホストを受け入れるフラグを追加すると、接続が正しいパスにリダイレクトされ、問題が修正されました。
psql -U username -p port -h Host
PS:Unixドメインソケットはカーネルレベルで機能し、接続はTCP接続に必要なすべてのジャズを経由する必要はありません。プロセス間通信の一部として別のプロセスからの自分のマシン。
コマンドラインでpsql
を実行しようとすると、同じエラーが発生しました。私の解決策ははるかに単純であることがわかりました。私は設定ファイルでリスニングポートを誤って設定しました:/ etc/postgresql/9.4/main/postgres.conf。ポートをポート= 5432からポート= 5433に変更しました。ポートを5432に戻すと、期待どおりに機能しました。
同様のことを行ったかどうかをテストするには、$ psql -p5433
を実行します。psqlコマンドには、次のような便利なオプションが多数あります。 http://www.postgresql .org/docs/9.4/static/app-psql.html を使用して、OWN固有の誤った構成をテストできます。もちろん、構成変更の最後のセットを* .confファイルから削除して、それらが問題の原因であるかどうかをテストすることもできます。ファイルのアクセス許可と所有権を変更する前に、ぜひチェックしてみる価値はあると思います。 (/etc/init.d/postgresql restart
を忘れないでください)
見つからなかったのは、psql CLIコマンドのデフォルト値を設定する構成ファイルです。誰かがコメントできますか?
私にとって、私は常にプログラミングの最初の原則に戻ります。「私は通常、特定のエラーの原因です!」