ローカルPostgreSQLに接続できません


124

私はなんとか私のローカル開発環境を破壊しました。

私のローカルRailsアプリはすべてエラーを出します:

PGError
could not connect to server: Permission denied
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

何が原因なのかわかりません。

解決策を探している間、私はすべてのバンドルされたgem、更新されたシステムgem、更新されたMacPortsを更新しました。喜びがない。

OSX LeopardからLionにアップグレードするときに、使用するPostgresのバージョン(OSXバージョンまたはMacPortsバージョン)が混乱するため、この問題が報告されています。私はライオンを数か月間実行しているので、これが今発生するのは奇妙に思えます。

私は問題が何であるかを最初に理解することなく、あまりいじりをすることに消極的です。これを系統的にデバッグするにはどうすればよいですか?

システムにあるPostgreSQLのバージョンの数、アクセスしているバージョン、およびその場所を確認するにはどうすればよいですか?間違ったPostgreSQLが使用されている場合、どうすれば修正できますか?

noobの質問でごめんなさい。これがどのように機能するかはまだ学習中です!ポインタをありがとう。

編集

以下の提案とコメントに基づく更新。

エラーpg_lsclustersを返す実行しようとしcommand not foundました。

次に、pg_hba.confファイルをローカル化しようとしたところ、次の3つのサンプルファイルが見つかりました。

/opt/local/share/postgresql84/pg_hba.conf.sample
/opt/local/var/macports/software/postgresql84/8.4.7_0/opt/local/share/postgresql84/pg_hba.conf.sample
/usr/share/postgresql/pg_hba.conf.sample

PSQLの3つのバージョンがインストールされていると思いますか?Macports、OSXデフォルトおよび???。

次に、launchctl起動スクリプトps -ef | grep postgresを検索しました。

0    56     1   0 11:41AM ??         0:00.02 /opt/local/bin/daemondo --label=postgresql84-server --start-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper start ; --stop-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper stop ; --restart-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper restart ; --pid=none
  500   372     1   0 11:42AM ??         0:00.17 /opt/local/lib/postgresql84/bin/postgres -D /opt/local/var/db/postgresql84/defaultdb
  500   766   372   0 11:43AM ??         0:00.37 postgres: writer process                                                                                                                                                                                                                                                                                                                   
  500   767   372   0 11:43AM ??         0:00.24 postgres: wal writer process                                                                                                                                                                                                                                                                                                               
  500   768   372   0 11:43AM ??         0:00.16 postgres: autovacuum launcher process                                                                                                                                                                                                                                                                                                      
  500   769   372   0 11:43AM ??         0:00.08 postgres: stats collector process                                                                                                                                                                                                                                                                                                          
  501  4497  1016   0 12:36PM ttys000    0:00.00 grep postgres

postgresql84-server.wrapperの内容をhttp://pastebin.com/Gj5TpP62に投稿しました。

実行しようとしましport load postgresql184-serverたが、エラーが表示されましたError: Port postgresql184-server not found

私はまだこれを修正する方法に非常に混乱しており、「ダミー用」のポインタを高く評価しています。

ありがとう!

EDIT2

この問題は、daemondoで問題が発生した後に始まりました。ローカルのRailsアプリが、「daemondo gemが見つかりません」というメッセージに沿ってアプリケーションエラーでクラッシュしました。次に、一連のバンドル更新、gem更新、port更新、およびbrew更新を実行して、問題を見つけてみました。

このエラーはdaemondoの問題でしょうか?


アプリが接続するとき、UNIXドメインソケットではなくtcpポートを介して接続することに注意してください。したがって、少なくともlocalhostからのネットワーク接続を受け入れるようにpostgresを設定する必要があります。
Paul Tomblin、2011

なぜそう信じますか?明らかに、ドライバはUnixソケットを介して接続しようとしています。彼らは間違った場所でソケットを探しますが。
Milen A. Radev


丁度。マックなもののようです。OPは、ポストマスターが実行されていることを確認した後、-hフラグを使用できます。
wildplasser

pg_lsclusterspg_hba.confファイルの出力を投稿してください。
tscho

回答:


66

これは本当にファイルのアクセス許可エラーのように見えます。Unixドメインソケットはファイルであり、他と同様にユーザー権限を持っています。データベースにアクセスしようとしているOSXユーザーには、ソケットファイルにアクセスするためのファイル権限がないようです。これを確認するために、Ubuntuとpsqlでいくつかのテストを行って、同じエラーを生成しようとしました(以下に含まれています)。

あなたは、ソケットファイルとそのディレクトリのパーミッションをチェックする必要があります/var/var/pgsql_socket。Railsアプリ(OSXユーザー)には、これらのディレクトリに対する実行(x)アクセス許可(できれば全員にアクセス許可を与える)が必要であり、ソケットには完全なアクセス許可(wrx)が必要です。を使用ls -lAd <file>してこれらを確認できます。それらのいずれかがシンボリックリンクである場合は、ファイルを確認するか、リンクが指すディレクトリを指定する必要があります。

dirのアクセス権は自分で変更できますが、ソケットはのpostgresによって構成されpostgresql.confます。これはpg_hba.conf(同じディレクトリにある必要があります)と同じディレクトリにあります。権限を設定したら、postgresqlを再起動する必要があります。

# postgresql.conf should contain...
unix_socket_directory = '/var/run/postgresql'       # dont worry if yours is different
#unix_socket_group = ''                             # default is fine here
#unix_socket_permissions = 0777                     # check this one and uncomment if necessary.

編集:

Googleで簡単な検索を行ったので、関連があるかどうかを確認します。これにより、find設定ファイルの試行が失敗する可能性があります。

http://www.postgresqlformac.com/server/howto_edit_postgresql_confi.html


エラーメッセージ:

pg_hba.confにユーザーが見つかりません

psql: FATAL:  no pg_hba.conf entry for host "[local]", user "couling", database "main", SSL off

ユーザーがパスワード認証に失敗しました:

psql: FATAL:  password authentication failed for user "couling"

UNIXソケットファイルがありません:

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

Unixソケットは存在しますが、サーバーはそれをリッスンしていません。

psql: could not connect to server: Connection refused
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

UNIXソケットファイルの不正なファイル権限

psql: could not connect to server: Permission denied
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

1
@coulingのアイデアに感謝します。これは正しい方向のように感じます。しかし、私のセットアップには非常に奇妙なものがあります。これは最近まで完全に機能していたことを覚えておいてください。私はシステム上の3つのpostgresディレクトリを調べましたが、すべてにconf.sampleファイル(pg_hba、pg_ident、pg_serviceなど)が含まれていますが、.confファイルは含まれていません。これは正しくないはずですよね?また、.s.PGSQL.5432を含むディレクトリは空です。代わりに、/ private / tmp / .s.PGSQL.5432.lockにファイルがあります。PS実行中のpostgresプロセスを返します。混乱しました!
アンディハーヴェイ、

追加のリンクを追加しました。私が知る限り、postgresql.confがないと、実際にpostgresqlを作成できません(たとえ名前が変更されていても)。あなたの最初の仕事はこれを見つけることです。
Philip Couling

1
私のディレクトリを調べて適切なファイルを見つけるのに少し時間がかかりましたが、これは確かに問題でした。非常に詳細な回答をありがとう。正しいディレクトリを見つけたら、postgresql.confにソケットディレクトリ、データディレクトリ、hba_file、ident_fileを設定する必要がありました。ありがとうございました!
アンディハーヴェイ

1
一部の人々を助けるかもしれません:私は自分のアカウントでpostgresをインストールするためにbrewを使用しました。私の場合、フォルダ/ var / pgsql_socket /はユーザー_postgresが所有しており、所有権を私のアカウント(darren)に変更すると、この問題が修正されました。brewがこのフォルダの所有権を最初に正しく設定しなかった理由がわからない...?
Darren Jensen

よろしくお願いします。接続できず、unix_socket_directoryを設定するのが正しいことでした。
Ryan Bigg

41

私の直感は、これが(再び)mac / OSXのものであるということです。フロントエンドとバックエンドは、UNIXドメインソケット(ランデブーポイントとして機能する)の異なる場所を想定しています。

チェックリスト:

  • postgresが実行されていますps aux | grep postgres | grep -v grepか:トリックを実行する必要があります
  • ソケットはどこにありますかfind / -name .s.PGSQL.5432 -ls(ソケットは/ tmpにあったものです。そこから始めることができます)
  • (unix-domain)ソケットを見つけても、クライアントは別の場所を使用できます。(これは、ディストリビューションを混合した場合、またはディストリビューションがどこかにインストールされていて、別の場所(たとえば、ソースから)でインストールされている場合)で、クライアントとサーバーは異なるランデブーアドレスを使用します。

postgresが実行されていて、ソケットが実際に存在する場合は、以下を使用できます。

  • psql -h /the/directory/where/the/socket/was/found mydbname

(UNIXドメインソケットへの接続を試みます)

; これで、psqlプロンプトが表示されます。試し\d\qから終了します。あなたも試すことができます:

  • psql -h localhost mydbname

(これはlocalhost(127.0.0.1)への接続を試みます)

承認が不十分なためにこれらの試行が失敗した場合は、pg_hba.confを変更(およびSIGHUPまたは再起動)できます。この場合は、ログも確認してください。

同様の質問:Postgresを開始できません

注:psqlプロンプトが表示される場合は、この問題を簡単に修正するには、を変更するだけconfig/database.ymlです。

host: localhost

またはあなたは追加してみることができます:

host: /the/directory/where/the/socket/was/found

私の場合、 host: /tmp


1
@wildplasserご回答ありがとうございます。これは私を正しい方向に導きました、そしてクーリングの詳細な答えが解決策を与えました。
アンディハーベイ、

6
ホスト:localhostを私のdatabase.ymlに追加すると問題が解決しました。ありがとう:)
Automatico

1
私は/ private / ....奇妙です。私はそれをインストールしましたが、このラップトップは以前にも問題がありました。変だ。そのdatabase.ymlが鍵でした!
pjammer 2012

4
変だ。「localhost」を私のdatabase.ymlに追加することも機能しましたが、なぜそうなのですか?私はそれを以前に持っていなかったし、すべてがうまくいった。でも、最近は何も付け足さなかったと思いますが、いきなりすでにそうなってしまいました。> _ <
インデックス

1
ここでの私にとってのトリックはソケットパスでした-それは/ var / runではなく/ runにありました-ありがとう!
qodeninja 2018

26

(PG宝石をアンインストールしてみてくださいgem uninstall pg、あなたがバンドラ使用する場合は、 -それから再インストール)bundle install、他gem install pg。また、パスが正しいバージョンを選択していることを確認してください。Lionにはposgresqlのバージョンがあり(以前のバージョンにはありません)、ローカルにインストールされたバージョン(MacPorts、homebrewなど)の前のパスにある可能性があります。

私の場合:postgresqlのhomebrewインストール、更新されたpostgresql、railsなど、そしてこのエラーが発生しました。pg gemをアンインストールして再インストールすると、うまくいきました。


8
bundle exec gem pristine pg <==でもうまく
いきます

OPのエラーはさまざまな原因で発生することは間違いありませんが、これが私にとって有効な解決策です。
redhotvengeance

20

ソケットファイルの場所は、コンパイル時にgemにベイク処理されます。したがって、pg gemを再構築する必要があります。

gem pristine pg
# or
bundle exec gem pristine pg

これにより、その特定の問題が解決されます。


Postgresを9.1xから9.3xにアップグレードした後、この質問で説明されている問題が発生し始めました。この答えは私のためにそれを修正しました(私のlocal.ymlに 'localhost'を追加したので、このアプローチの方が好きです)。
ジョシュアフラナガン

16

同様のエラーが発生する場合:

psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

これでうまくいくかもしれません(私にとってはそうでした):

initdb /usr/local/var/postgres -E utf8

OSX / Brewを使用していない場合は、指定したディレクトリが異なるはずです。

注:これは上記の正確なエラーメッセージではありませんが、このスレッドはそのエラーメッセージの最初の結果です。


6
私はいつも時々この問題を抱えることになりますが、これがこのソリューションで解決するのは初めてです。また、rm -fr /usr/local/var/postgres実行前でなければなりませんでしたinitb
Raf

1
これを行った後(NealとRafの両方)、「致命的」データベースが存在しないというエラーが発生しました。したがって、「rake db:create:all」と「rake db:migrate」を実行すると、最後にすべてが再び機能しました。
デボラ

私はまたしなければならなかったrm -rf /usr/local/var/postgres、その後initdb /usr/local/var/postgres -E utf8。ただし、これを行うときは、postgresが実行されていないことを確認してください。実行されていない場合、ディレクトリはすぐに再作成されます。
ジョシュWルイス

8

私にとってこのエラーを解決したのは、postgresディレクトリのpostmaster.pidというファイルを削除することでした。ステップバイステップの説明については、次のリンクを使用して私の質問/回答を参照してください。私の問題はファイルの権限に関連していませんでした:

psql:サーバーに接続できませんでした:そのようなファイルまたはディレクトリはありません(Mac OS X)

この質問に答える人々はゲームをたくさん落としました、そのおかげで!私はできる限り賛成した


ここで受け入れられた回答はファイルのアクセス許可の問題を示しているため、あなたの投稿とこれは関連していないようです。
Andrew Barber、

7

これは、wildplasserの回答に一部基づいて、私がそのエラーメッセージを解決した方法です。

find / -name .s.PGSQL.5432 -ls 2> /dev/null
  => ... /tmp/.s.PGSQL.5432

だから、私のソケットか何かがありますが、クライアントはそれを探します:

/var/run/postgresql/.s.PGSQL.5432

したがって、単純にへのシンボリックリンクを作成し/tmp/.s.PGSQL.5432ます。

sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

これが誰にも役立つことを願っています。ちょっと間違っているようですが、ちょっと、うまくいきます!


1
これは私にとってうまくいきました:sudo ln -s /tmp/.s.PGSQL.5432 /var/pgsql_socket/.s.PGSQL.5432
ardochhigh

ありがとう:)これは役に立ちました。しかし、symlinkを作成する前に、sudo mkdir /var/run/postgresqlフォルダーを作成することを忘れないでください(私の場合、IDは存在せず、pg 9.3.Xのインストーラーによって作成されませんでした)。
kovpack 14

2
ああ、このソリューションは、再起動するたびにやり直す必要のある「1回限り」のソリューションであることがわかりました。Railsの場合、他の解決策を見つけました-データベース構成ファイルを変更します(以下の回答を追加)。
kovpack 14

6

新しいpostgresにアップグレードした後、これを取得し始めました-データファイルを保持していることに気付きませんでした。

まず、postgresサーバーを起動しようとしました。

postgres -D /usr/local/var/postgres

これは私がこのエラーを見た方法です

FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.0, which is not compatible with this version 9.3.5.

だから私はSOでこの答えを見つけました-非互換性エラーに関連しました:https : //serverfault.com/questions/342626/how-do-i-upgrade-postgresl-database-incompatibility-error

これはそれを修正したものです

mv /usr/local/var/postgres /usr/local/var/postgres.old
initdb -D /usr/local/var/postgres

4

PSQLとDjangoで同様の問題があったことを確認すると、

私のpsqlサーバーが正しくシャットダウンされておらず、postgresフォルダーにpostmaster.pidファイルがまだ存在していた(適切なシャットダウン時に自動的に削除される必要がある)ため、このように見えました。

これを削除し、すべて良い


2
これは私にとって問題を解決したものです。コンピューターがフリーズし、ハードシャットダウンを実行する必要がありました。私はそれをバックアップし始めた時、Postgresは言っていたpsql: could not connect to server: No such file or directory.削除postmaster.pidから/usr/local/var/postgres再び作られたすべての作品。
Ryan Epp

1
これも私に起こったことでした。カーネルパニックのためにMacが再起動し、作業に戻る前にpostmaster.pidを削除する必要がありました。
Ben

4

私はこれと同じエラーpostmaster.pidを受け取りました(それはのエラーであることがわかりました。これが私がpostgresを起動して再び実行した方法です(修正のためのRicardo Burilloの功績です):

$ rm /usr/local/var/postgres/postmaster.pid 
$ pg_resetxlog -f /usr/local/var/postgres

これは私にとってはうまくいきましたが、pg_resetxlog返された `ロックファイル「postmaster.pid」が存在します。
エリーゼ

3

Railsでpostgresqlを使用しようとすると、同様の問題が発生しました。新しいバージョンのgem pgを使用するようにGemfileを更新すると、この問題が解決します。(gem pgバージョン0.16.0は動作します)。Gemfileで次を使用します。

gem 'pg', '0.16.0'

次に以下を実行してgemを更新します

bundle install --without production
bundle update
bundle install

1
これで問題も解決しました。私はRails 4.0ベータを経て0.15.1でしたが、今はRuby 2.0.0を使用しています。pg 0.16.0にアップグレードすると、問題は修正されました。
bratsche 2013

4.1.0.beta1の問題を解決しました
Andreas

3

私はこのエラーに関する多くのトピックを読み、私への解決策は単にpostgresを次のように再起動することでした:

sudo service postgresql restart

ここでは触れません。


3
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

しばらくの間、解決策を探しています。だから、これも私のために問題を修正しました(dbを再初期化する):

rm -r /usr/local/var/postgres  
initdb /usr/local/var/postgres -E utf8  
pg_ctl -D /usr/local/var/postgres -l logfile start

OS X 10.11.3をbrewで使用しています。


2

私のMacbookのバッテリーがなくなった後、これは今日私に起こりました。これは不適切なシャットダウンが原因である可能性があると思います。私のような場合に行う必要があるのは、postmaster.pidを削除することだけです。

フォルダに移動します

cd /usr/local/var/postgres

postmaster.pidが存在するかどうかを確認します

ls

postmaster.pidを削除します

rm postmaster.pid

2

私の場合、以前の解決策はどれも良くありませんでした。ソケットを使用する代わりに、Rails構成ファイルでTCP host+ port番号を使用できます。したがって、database.ymlファイルに次のように2行追加するだけです。

...
adapter: postgresql
encoding: unicode
pool: 5
host: localhost
port: 5432

これは私の問題を解決しました:)

この修正を使用する前に:

sudo mkdir /var/run/postgresql
sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

しかし、再起動するたび/tmp/.s.PGSQL.5432に削除され、これらのコマンドを繰り返す必要がありました。解決策は機能しますが、恐ろしいので、Railsデータベースの構成ファイルを変更するだけです:)


2

DjangoでPosgtresをセットアップしているときにこのエラーが発生しました。BackTrackを使用していて、Postgresがインストールされています。設定が問題だと思います。私はそれを完全に削除し、そのように再インストールすることで修正しました。

sudo apt-get remove postgresql
sudo apt-get purge postgresql

今実行します:

apt-get --purge remove postgresql\*

システムからPostgreSQLをすべて削除します。postgresパッケージは単に空のメタパッケージなので、パージするだけでは不十分です。

すべてのPostgreSQLパッケージが削除されたら、次を実行します。

rm -r /etc/postgresql/
rm -r /etc/postgresql-common/
rm -r /var/lib/postgresql/
userdel -r postgres
groupdel postgres

これで次のことができるようになります。

apt-get install postgresql

1

MacOSXはこちら。homebrewを使用してpostresqlインストールを9.1より前から9.1.2にアップグレードした後も、同じ問題が発生しました。(ちなみに、pg_dumpでアップグレードする前に、データベースをダンプすることを忘れないでください。9.1以前のデータベースは互換性がありません。)同じ問題、同じエラーメッセージ。

pg gemをアンインストールすることでうまくいきました。私は実際に問題を発見するためにかなりのダンスをしなければなりませんでした。最初に、グローバルな宝石のアンインストールを実行し、古い宝石のデッキをいくつかクリアしました(いくつかありました)。次に、pgをGemfileから削除し、再バンドルして、pg参照を復元し、もう一度リバウンドしました。

その後、それは魅力のように働きました。


1

こんにちは世界:)
私にとって最良で奇妙な方法は次のことをすることでした。

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

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

export PATH = / Applications / Postgres93.app / Contents / MacOS / bin /:$ PATH
これはpsqlからのパスPostgres93.appです。行(コマンド)は、コンソールが起動するたびに実行されます。

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

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

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

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


0

私はこの問題に悩まされ、さらに調査(を実行rake db:setup)すると、レールが以前に使用されたpostgresインスタンス(DATABASE_URLとして環境変数に格納されたもの)に接続しようとしていることがわかりました。

修正: unset DATABASE_URL

ソース:https : //stackoverflow.com/a/17420624/2577622


0

私はこの問題のほとんどの解決策を試しましたが、どれも動作しませんでした。

私は走ったlsof -P | grep ':5432' | awk '{print $2}'プロセスが実行のPIDを示しました。しかし、私はそれを殺すことができませんでしたkill -9 <pid>

私が実行しpkill postgresqlたとき、プロセスは最終的に停止しました。お役に立てれば。


0
gem uninstall pg

Homebrewを備えたOS Xの場合:

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