2

この質問は OS 固有のものではないと思うので、この質問を askubuntu に移動しないでください。

postgres コマンドを呼び出すとcreateuser(今のところ、パラメーターを指定するかどうかは問題ではありません)、次のエラーが発生します。

createuser: could not connect to database postgres: 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"?

通常、これは postgres サーバーがダウンしていることを意味しますが、今回はそうではありません。

pg_lsclusters
Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log

sudo service postgresql status
9.4/main (port 5432): online

/tmp/.s.PGSQL.5432しかし、構成ファイル ( /etc/postgresql/9.4/main/postgresql.conf) に次の行があるため、ファイルがないのは事実です。

unix_socket_directories = '/var/run/postgresql'

なぜcreateuserアクセスする必要があるのか​​ よくわかりません/tmp/.s.PGSQL.5432か?createuserこのパスをバイナリにハードコードできますか? 設定ファイルの場所を指定するコマンド ライン引数が表示されませんcreateuser

4

2 に答える 2

3

postgresql.conf ファイルはデータベースサーバーによって読み取られますが、クライアント アプリケーション (createuser、psql など) によって読み取られることはありません。(実際には、サーバー構成ファイルはクライアント アプリケーションによって読み取ることができません。これは、構成ファイルが存在する場所を知る前に、クライアントがサーバーに接続する必要があるためです。サーバーは地球の反対側にある可能性があります)。

代わりに、クライアントアプリケーションにソケット ディレクトリの場所を指定する必要があります。

クライアント アプリケーション (createuser) がローカル ホストに接続している場合 (別のホストを指定していないため、接続している必要があります)、host パラメータを使用してソケット ディレクトリの名前を指定します。

例えば: createuser -h /var/run/postgresql newusername

http://www.postgresql.org/docs/devel/static/libpq-connect.html#LIBPQ-CONNECT-HOSTを参照してください

それが役立つことを願っています。

于 2016-04-18T16:36:39.917 に答える