1. ホーム
  2. postgresql

[解決済み] PostgreSQLの場合。なぜ psql はサーバに接続できないのでしょうか?

2022-12-20 07:38:19

質問

私が入力した psql と入力すると、こうなります。

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

私は sudo netstat -nlp | grep 5432 を使って状態を見ましたが、何も表示されませんでした。 そして、私はオンラインで検索し、誰かが私に修正するように言った pg_hba.conf を修正するように言われましたが、私はできません。 locate を実行することができません。そして、私はまた、このコマンドを試してみました sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432 . それは動作することはできません。

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

このエラーは、psql ユーティリティがデータベース サーバーに接続するためのソケットを見つけることができないことを述べています。データベース サービスをバックグラウンドで実行していないか、ソケットが別の場所にあるか、またはおそらく pg_hba.conf を修正する必要があります。

ステップ 1: データベースが動作していることを確認する

コマンドはオペレーティング システムによって異なる場合があります。しかし、ほとんどの *ix システムでは、次のコマンドを実行すると、実行中のすべてのプロセスの中から postgres を検索します。

ps -ef | grep postgres

私のシステム、mac osxでは、これは次のように吐き出されます。

501   408     1   0  2Jul15 ??         0:21.63 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log

最後の列は、サーバーを起動するために使用されたコマンドと、そのオプションを示します。

以下を使用して、postgresサーバを起動するために利用可能なすべてのオプションを見ることができます。

man postgres

そこから、オプションの -D-r はそれぞれ datadir であり logfilename .

ステップ2:postgresサービスが稼働している場合

使用する find を使って、ソケットの場所を探します。 /tmp

sudo find /tmp/ -name .s.PGSQL.5432

postgresが起動しており、ソケット接続を受け付けている場合、上記はソケットの場所を教えてくれるはずです。私のマシンでは、それは判明しました。

/tmp/.s.PGSQL.5432

次に、このファイルの場所を明示的に指定して、psqlで接続してみてください。

psql -h /tmp/ dbname

ステップ3: サービスは実行されているが、ソケットが表示されない場合

ソケットが見つからないが、サービスが実行されていることが確認できる場合、pg_hba.confファイルがローカルソケットを許可していることを確認します。

をブラウズして datadir を見つけると、その中に pg_hba.conf ファイルが見つかるはずです。

デフォルトでは、ファイルの最下部付近に以下の行があるはずです。

# "local" is for Unix domain socket connections only
local       all       all       trust

表示されない場合は、ファイルを修正し、postgresサービスを再起動します。