私は自分の地元の開発環境をどうにかしてしまった。
すべてのローカル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の問題ですか?
これは本当にファイル許可エラーのように見えます。 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"?
私の直感では、これは(再び)mac/OSXのものです:フロントエンドとバックエンドは、Unixドメインソケット(rendezvousポイント)。
チェックリスト:
ps aux | grep postgres | grep -v grep
がトリックを実行する必要がありますfind / -name .s.PGSQL.5432 -ls
(以前は/ tmpにあったソケット。そこから探し始めることができます)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
Pg gem(gem uninstall pg
)をアンインストールしてから再インストールしてみてください-バンドラーを使用する場合はbundle install
、そうでない場合はgem install pg
。また、パスが正しいバージョンを選択していることを確認してください:Lionにはposgresqlのバージョンがあり(以前のバージョンにはありませんでした)、ローカルにインストールされたバージョン(MacPorts、homebrewなど)の前のパスにある可能性があります。
私の場合:postgresqlのhomebrewインストール、postgresql、Railsなどを更新してから、このエラーが発生しました。 pg gemをアンインストールして再インストールすると、うまくいきました。
ソケットファイルの場所は、コンパイル時にgemに焼き付けられます。したがって、pg gemを再構築する必要があります。
gem pristine pg
# or
bundle exec gem pristine pg
これにより、その特定の問題が解決するはずです。
同様のエラーが表示される場合:
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を使用していない場合、指定するディレクトリは異なる必要があります。
注:これは上記の正確なエラーメッセージではありませんが、このスレッドはそのエラーメッセージの最初の結果です。
このエラーを解決したのは、postgresディレクトリのpostmaster.pidというファイルを削除することでした。ステップごとの手順については、次のリンクを使用して質問/回答をご覧ください。私の問題はファイルの許可とは関係ありませんでした:
psql:サーバーに接続できませんでした:そのようなファイルまたはディレクトリはありません(Mac OS X)
この質問に答えた人たちはゲームをたくさん落としましたが、ありがとうございます!私はできる限りすべてを支持しました
これは、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
これが誰にも役立つことを願っています。これはちょっと間違っているように見えますが、ちょっと、うまくいきました!
新しい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
PSQLとDjangoで同様の問題が発生したことを確認するだけで、
私のpsqlサーバーが正しくシャットダウンされず、postgresフォルダーにpostmaster.pidファイルがまだ存在していたため(適切なシャットダウン時に自動的に削除されるはずです)のように見えました。
これを削除し、すべて良い
私はこれと同じエラーを受け取っていました(それはpostmaster.pid
のエラーであることが判明しました。postgresを再起動して実行した方法は次のとおりです( 修正はRicardo Burilloの功績 ):
$ rm /usr/local/var/postgres/postmaster.pid
$ pg_resetxlog -f /usr/local/var/postgres
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
このエラーに関する多くのトピックを読みましたが、私に対する解決策は次のようにpostgresを単純に再起動することでした。
Sudo service postgresql restart
ここでは言及していません。
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を使用します。
私の場合、以前のソリューションはどれも良いものではありませんでした。ソケットを使用する代わりに、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データベース設定ファイルを変更するだけで済みます:)
これは、Macbookのバッテリーが切れた後、今日私に起こりました。これは不適切なシャットダウンが原因であると考えられます。私のような場合にあなたがしなければならないのは、postmaster.pidを削除することです
フォルダーに移動します
cd /usr/local/var/postgres
Postmaster.pidが存在するかどうかを確認します
ls
Postmaster.pidを削除します
rm postmaster.pid
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
MacOSXはこちら。 homebrewを使用してpostresqlインストールを9.1より前から9.1.2にアップグレードした後、同じ問題が発生しました。 (ところで、pg_dumpでアップグレードする前にデータベースをダンプすることを忘れないでください。9.1以前のデータベースには互換性がありません。)同じ問題、同じエラーメッセージ。
Pg gemをアンインストールするとうまくいきました。私は実際に問題を発見するためにかなりのダンスをしなければなりませんでした。最初に、グローバルな宝石のアンインストールを行い、古い宝石をすべて削除しました(いくつかありました)。次に、Gemfileからpgを削除し、再バンドルし、pg参照を復元して、もう一度リバウンドしました。
その後、それは魅力のように働きました。
私はこの問題に悩まされていましたが、さらに調査(rake db:setup
を実行)すると、Railsが以前に使用されたpostgresインスタンスに接続しようとしていることがわかりました。 。
修正:unset DATABASE_URL
私はこの問題のほとんどの解決策を試しましたが、何も機能しませんでした。
実行中のプロセスのPIDを示すlsof -P | grep ':5432' | awk '{print $2}'
を実行しました。しかし、私はkill -9 <pid>
でそれを殺すことができませんでした。
pkill postgresql
を実行すると、プロセスが最終的に停止しました。お役に立てれば。
gem uninstall pg
Homebrewを使用したOS Xの場合:
gem install pg -- --with-pg-config=/usr/local/bin/pg_config