web-dev-qa-db-ja.com

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

私は自分の地元の開発環境をどうにかしてしまった。

すべてのローカル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、およびMacPortを更新しました。喜びはありません。

OSX LeopardからLionにアップグレードするときに、Postgresのどのバージョン(つまり、OSXバージョンまたはMacPortsバージョン)を使用するかについての混乱のため、他の人がこの問題を報告しています。 Lionを数か月間使ってきたので、今これが起こるのは奇妙に思えます。

私は、問題が何であるかを最初に理解することなく、あまりにも多くのことをやりたがりません。これを系統的にデバッグするにはどうすればよいですか?

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の更新、ポートの更新、およびbrewの更新を行って、問題を見つけてみました。

このエラーはdaemondoの問題ですか?

124
Andy Harvey

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

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

Dirのパーミッションは自分で変更できますが、ソケットはpostgresql.confのpostgresによって設定されます。これは、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"?
66
Philip Couling

私の直感では、これは(再び)mac/OSXのものです:フロントエンドとバックエンドは、Unixドメインソケット(rendezvousポイント)。

チェックリスト:

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

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

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

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

; psqlプロンプトが表示されます。\dを試してから、\qを試して終了してください。また試すことができます:

  • psql -h localhost mydbname

(ローカルホスト(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

41
wildplasser

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

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

26
Tom Harrison

ソケットファイルの場所は、コンパイル時にgemに焼き付けられます。したがって、pg gemを再構築する必要があります。

gem pristine pg
# or
bundle exec gem pristine pg

これにより、その特定の問題が解決するはずです。

20
Ben Walding

同様のエラーが表示される場合:

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を使用していない場合、指定するディレクトリは異なる必要があります。

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

16
Neal

このエラーを解決したのは、postgresディレクトリのpostmaster.pidというファイルを削除することでした。ステップごとの手順については、次のリンクを使用して質問/回答をご覧ください。私の問題はファイルの許可とは関係ありませんでした:

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

この質問に答えた人たちはゲームをたくさん落としましたが、ありがとうございます!私はできる限りすべてを支持しました

8
FireDragon

これは、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

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

7
Frans

新しい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
6
Mark Swardstrom

PSQLとDjangoで同様の問題が発生したことを確認するだけで、

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

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

4
purchas

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

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

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
3
andr3wll

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

Sudo service postgresql restart

ここでは言及していません。

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

しばらく解決策を探しました。だから、これは私のためにも問題を修正しました(reinit db):

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

BrewでOS X 10.11.3を使用します。

3

私の場合、以前のソリューションはどれも良いものではありませんでした。ソケットを使用する代わりに、TCP Host + port番号をRails構成ファイルで使用できます。したがって、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
kovpack

これは、Macbookのバッテリーが切れた後、今日私に起こりました。これは不適切なシャットダウンが原因であると考えられます。私のような場合にあなたがしなければならないのは、postmaster.pidを削除することです

フォルダーに移動します

cd /usr/local/var/postgres

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

ls

Postmaster.pidを削除します

rm postmaster.pid
2
Aaron

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
2
user3982654

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

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

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

1
wizardwerdna

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

修正:unset DATABASE_URL

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

0
adrichman

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

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

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

0
Colin Walker
gem uninstall pg

Homebrewを使用したOS Xの場合:

gem install pg -- --with-pg-config=/usr/local/bin/pg_config
0
张健健