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


32

最近、私のマシンを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アプリからのクエリ(テストデータベースと開発データベースの両方)に応答しています

  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ディレクトリを作成し(ユーザーに書き込み権限がある)、サーバーを再起動します。それがそれを修正するかどうかを確認
デレクダウニー

SOに関する関連質問。Appleはアップグレードで素晴らしい仕事をしなかったようです。
アーウィンブランドステッター

ログファイルに作成されているソケットファイルの言及はあります/usr/local/var/postgres/server.logか?
フィリ

@ErwinBrandstetter手動でインストールされたサードパーティの* nixアプリをアップグレードする「良い仕事」をAppleが行うことをどのように期待しますか?
フィリ

@ Phil-言及なし。これはパス変数の問題かもしれないと考え始めています。$PATHアップグレードで私の変更/usr/binが先に進ん/usr/local/binだと思うし、Mountain LionにはPostgreSQLがプリインストールされているかもしれません!?!調査中...
メルテミ

回答:


30

私は非常に似た問題を抱えていることを発見しました。つまり、postgresが/var/pgsql_socket_alt私のソフトウェアのどれも見たくないところにソケットを開いていましたが、私の問題の解決策はmyの問題だけではありませんでした$PATH

私は、ディレクトリを作成しなければならなかった/var/pgsql_socket、自分自身にそれをchownコマンド、およびセットunix_socket_directorypostgresql.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でPostgreSQLをインストールしましたか?もしそうなら、$PATH私がやったように私の変更とは対照的に、他の誰かがこの解決策を検証できるかどうか疑問に思う。
メルテミ

はい、はい、そう願っています!
ウィル

@wolftronのソリューションは私にとって強烈なものでした(Mountain Lion、homebrew / postgres、/ var / pgsql_socket_alt、9つすべて)。これは自作のマウンテンライオンに関する新しい問題ですか?あなたがそう思うなら、私は彼らとチケットを開きます。

@Jamieから確認を受け取ったようです。
ウィル

OS X 10.8.2 / postgresql 9.2.1のbrewインストールでこの問題と解決策を確認できます。
ハートウィグ

8

もっともらしい典型的な説明psqlは、homebrewに付属/usr/local/bin/psqlするものは、$ PATHにあるもの/usr/bin/psql(OS Xにバンドルされている)とは異なるということです。あなたはフルパスで試してみたいかもしれません:

$ /usr/local/bin/psql -U rails -d myapp_development

また、ps質問の出力にはかなり珍しいものがあります。postgresサーバーはmeltemiUnixユーザーで実行されていますが、一般的には専用のpostgresUnixユーザーが使用されます。


また、_postgresユーザー/グループの(アンダースコア付き)が不明です。それはアーティファクトですか、それとも予想ですか?
アーウィンブランドステッター

はい、それは$PATHあなたが述べたように問題のようです。/usr/local/bin/psqlデータベースへのアクセスに使用するとき、物事は以前と同様に機能します。LionにシステムPostgreSQLがなかったか、$ PATHの設定が異なっていました。私が最後にこれをいじってから1年が経ったので、正確に思い出すことはできません。Unixユーザーの場合は、PostgreSQLのHomebrewインストールでは、サーバーはlaunchdによって起動され、ユーザーはデフォルトでインストールしたローカルユーザーに設定されます。物事はで様々に設定されているMac OS X Serverの下に自動的にPostgreSQLの起動しますpostgres
メルテミ

4

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

したがって、psqlが選択したソケットを自動的に使用するようにするには、PGHOST変数をソケットを含むディレクトリに設定できます。すなわち

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase

1
PGHOSTをソケットファイルが存在するディレクトリに設定できることは、どこにも記載されていません。しかし、実際には機能します。ありがとう!
アンドリューシュルマン

3

試してください:

psql -U rails -d myapp_development -h localhost

または

psql -U rails -d myapp_development -h 127.0.0.1

3

遅いですが、私はこれが役立つことがわかりました: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アップグレード後に神秘的なフォルダーがありまし/var/pgsql_socketたが、@ wolftronの提案に従って削除して作成しました。しかし、それは最終的な解決策ではありませんでした。

unix_socket_directory空白のままにしたりコメントアウトしたりpostgresql.confすると、アップグレード前に存在していたすべてのプロジェクトで、ソケット/var/pgsql_socketが欠落しているという苦情が出ます。しかし、confとhard-codedを変更した場合var/pgsql_socket、新しいプロジェクトはソケットが/tmpが欠落し。非常にイライラする... pg gem10.8より前のプロジェクトに再インストールし(gem uninstall pg && gem install pgunix_socket_directoryconfファイルにコメントアウトしたままになるまで。pg_ctlサーバーをすばやく再起動すると、新しいプロジェクトと古いプロジェクトの両方が機能しました。私のpgsqlソケットは/tmp現在fwiwにあります。

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


2

dba SEにサインアップしたばかりなので、関連する投稿にコメントできないようです(なんてこった!)。

しかし、私は@thureと同じボートに乗っていると確信していました。/ usr / local / binが/ usr / binよりもPATH内で早いことを確認し、シェルがハッシュしたバイナリをチェックしてwhichtype

@thureと同じ症状が見られました。それから私はひらめきを感じました。pgPATHがMacのpath_helper(/ etc / profileから実行され、/ usr / binを/ usr / local / binの前に置く)によって悪影響を受けたシェルでgem(私はRubyを使用している)を再構築したことに気付きました。

pgをアンインストールし、PATHが正しいシェルに再インストールしました。突然接続できました!

そのため、言語バインディングの人々を再コンパイルし、(おそらく)の正しいコピーを見つけるようにしてくださいpg_config



1

実際の場所と期待される場所とのシンボリックリンクがうまくいくことがわかりました。

sudo ln -s /var/pgsql_socket_alt /var/pgsql_socket

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


1

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

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

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

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

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

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

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


1

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

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

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

psql -U username -p port -h host

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


0

Hello world :)
私にとって最良だが奇妙な方法は、次のことをすることでした。

1)postgres93.appまたは他のバージョンをダウンロードします。このアプリを/ Applications /フォルダーに追加します。

2)ファイル.bash_profile(私のホームディレクトリにある)に行(コマンド)を追加します。

export PATH = / Applications / Postgres93.app / Contents / MacOS / bin /:$ PATH
psqlfrom へのPATH Postgres93.appです。行(コマンド)は、コンソールが開始されるたびに実行されます。

3)フォルダPostgres93.appから起動し/Applications/ます。ローカルサーバーを起動します(ポートは「5432」、ホストは「localhost」です)。

4)このすべての操作の後、実行$ createuser -SRDP user_nameして他のコマンドを実行し、それが機能することを確認できて嬉しかったです!Postgres93.appシステムを起動するたびに実行するようにできます。

5)また、データベースをグラフィカルに表示したい場合は、インストールする必要がありますPG Commander.app。あなたのpostgres DBをきれいなデータテーブルとして見るのに良い方法です

もちろん、ローカルサーバーでのみ役立ちます。この指示がこの問題に直面した他の人を助けるならば、私はうれしいです。



0

psqlコマンドラインで実行しようとすると、同じエラーが発生しました。私のソリューションははるかにシンプルであることがわかりました。設定ファイル/list/postgresql/9.4/main/postgres.confのリスニングポートを誤って設定していました。ポートをポート= 5432からポート= 5433に変更しました。変更して5432に戻すと、期待どおりに機能しました。

同様のことを行ったかどうかをテストするには $ psql -p5433 、psqlコマンドに次のような便利なオプションがいくつかあります:http : //www.postgresql.org/docs/9.4/static/app-psql .htmlを 使用すると、独自の特定の構成ミスをテストできます。もちろん、設定変更の最後のセットも* .confファイルから簡単に削除して、それらが問題の原因であるかどうかをテストできます。ファイルのアクセス権と所有権をいじる前に、確認する価値があると思います。(忘れないでください/etc/init.d/postgresql restart

私が見つけることができなかったのは、psql CLIコマンドのデフォルト値を設定する設定ファイルでした。誰かコメントしていただけますか?

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.