1. ホーム
  2. ruby-on-rails

[解決済み] ローカルのPostgreSQLに接続できない

2022-08-14 21:43:12

質問

ローカルの開発環境を壊してしまいました。

私のローカルの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"?

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

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

OSX Leopard から Lion へのアップグレード時に、どちらのバージョンの Postgres を使用すべきか (すなわち、OSX バージョンまたは MacPorts バージョン) の混乱が原因で、この問題を報告している人がいます。私は数か月間 Lion を使用していたので、今になってこのようなことが起こるのは奇妙に思われます。

まず何が問題なのかを理解しないことには、あまりいじくり回したくないのです。どのようにすれば、これを系統的にデバッグできますか?

私のシステム上にある PostgreSQL のバージョン数、アクセスされているもの、そしてその場所をどのように判断すればよいのでしょうか? 間違った PostgreSQL が使用されている場合、どのように修正すればよいのでしょうか?

無知な質問で申し訳ありません。私はまだ、これがどのように機能するか学んでいます! どんなポインタでもありがとうございます。

EDIT

以下の提案とコメントに基づいて、いくつかのアップデートを行いました。

私は 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

ということは、3つのバージョンのPSQLがインストールされているのでしょうね?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 .

私はこれを修正する方法をまだ非常に混乱しています。そして、どんなquot;for dummies"ポインタにも感謝します。

ありがとうございます。

EDIT2

この問題は、daemondo でいくつかの問題が発生した後に始まりました。私のローカルの Rails アプリは、"daemondo gem can not be found" という行のアプリケーション エラーでクラッシュしていました。その後、私は一連のバンドル更新、gem更新、ポート更新、およびbrew更新を行い、問題を見つけようとしました。

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

どのように解決するのですか?

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

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

ディレクトリのパーミッションは自分で変更することができますが、ソケットは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.


EDITです。

私は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"?