web-dev-qa-db-ja.com

PostgreSQLはローカルで実行されていますが、接続できません。どうして?

最近、私のマシンを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

これをトラブルシューティングするにはどうすればよいですか?

32
Meltemi

私は非常に似た問題を抱えていることを発見しました。つまり、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の言及を介してこの質問を見つけた他のユーザーに役立つ場合があります。

30
Will

もっともらしい典型的な説明は、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ユーザーが使用されていますそのため。

8
Daniel Vérité

私は、psqlクライアントの設定ファイルを知りません。ただし、psqlはコマンドラインオプションに関連するいくつかの環境変数を尊重します。

そのため、psqlが選択したソケットを自動的に使用するようにするには、PGHOST変数をソケットを含むディレクトリに設定します。つまり.

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase
4
happynix

試してください:

psql -U Rails -d myapp_development -h localhost

または

psql -U Rails -d myapp_development -h 127.0.0.1
3
Miguel

遅くなりましたが、これは役に立ちました: 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_directoryconfファイルにコメントアウトするまで、非常にイライラしました。サーバーを再起動するための迅速なpg_ctlの後で、新旧両方のプロジェクトが機能しました。私のpgsqlソケットは現在/tmpにあります、fwiw。

補足:activerecord-postgresql-adapter gemを使用している場合は、まずアンインストールしてからpgを再インストールし、次にactiverecord-postgresql-adapterを再インストールしてください。

3
Foot

私は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の正しいコピーを見つけられるようにしてください。

2
Graham Ashton

2016年、El Capitanが登場し、Appleは常に変化しています。PostgresはOSの一部としてインストールされており、postgres設定ファイルはpostgresql.confのunix_socket_directoriesプロパティを設定していますソケットは/ tmpにあります。ソケットは/tmp/.s.PGSQL.5432にあります。次のコマンドを実行することで問題を回避できました。

Sudo ln -s /tmp /var/pgsql_socket

これが誰かを助けることを願っています。

1
rdiddly

実際の場所と予想される場所のシンボリックリンクがうまく機能することがわかりました。

Sudo ln -s /var/pgsql_socket_alt /var/pgsql_socket

@thureによって受け入れられた回答の線に沿って、しかしより簡単です。

1
Danny Roberts

このナゲットを見つけたリンクをすぐに見つけることはできませんが、私にとってはうまくいきました。

pGHOST = localhostのエクスポート

ああ、ここにリンクがあります。 https://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser

1
eyemana

正しいソケットファイルを探します

find / -name .s.PGSQL.5432 -ls

結果からファイルへのパスを取得し、psqlコマンド内の「-h」パラメーターでパスを使用します

たとえば、これは(サーバーへのsshセッション内で)macOSサーバーの予定表と連絡先データベースに接続する方法です。

Sudo psql -U _calendar -h /private/var/run/caldavd/PostgresSocket/ -d caldav

次に、パスにあるソケットファイルを使用して接続します。

1
Olaf Seifert

私はこの答えを見つけました: https://stackoverflow.com/questions/10763143/in-Rails-couldnt-create-database-for-adapter-postgresql そして、それは単純だったので、私... $bundle updateそしてそれは再び働き始めました。

1
Erik Trautman

デフォルトでは、postgresはunix-domain-sockets経由で接続しようとしているようです。 NIXドメインソケット

これは、Dockerでpostgresインスタンスを実行していたときに起こりました。サーバーが受け入れる接続の種類を確認する必要があります。私にとってそれは明らかにTCPであり、UNIXドメインソケットではありませんでした。

ホストを受け入れるフラグを追加すると、接続が正しいパスにリダイレクトされ、問題が修正されました。

psql -U username -p port -h Host

PS:Unixドメインソケットはカーネルレベルで機能し、接続はTCP接続に必要なすべてのジャズを経由する必要はありません。プロセス間通信の一部として別のプロセスからの自分のマシン。

1
Sudip Bhandari

コマンドラインで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コマンドのデフォルト値を設定する構成ファイルです。誰かがコメントできますか?

私にとって、私は常にプログラミングの最初の原則に戻ります。「私は通常、特定のエラーの原因です!」

0