OSXにpostgresqlをインストールしました。psqlを実行すると、
$ psql
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.5433"?
ただし、/etc/servicesから
postgresql 5432/udp # PostgreSQL Database
postgresql 5432/tcp # PostgreSQL Database
# Tom Lane <[email protected]>
pyrrho 5433/tcp # Pyrrho DBMS
pyrrho 5433/udp # Pyrrho DBMS
5433はピュロンが占め、5432はpgに割り当てられています。
psql -p 5432
しかし、なぜ psql はそれを 5433 と認識するのでしょうか。また、デフォルトで psql が適切な場所を参照するようにするにはどうすればよいでしょうか。
ベストアンサー1
/etc/services
は単なるアドバイスであり、よく知られているポートの一覧です。そのポートで実際に何かが実行されていることや、指定されたサービスがそのポートで実行されることを意味するものではありません。
PostgreSQL の場合、ポート 5432 が使用可能な場合は、通常このポートを使用します。ポート 5432 が使用可能でない場合、ほとんどのインストーラーは次の空きポート (通常は 5433) を選択します。
このツールを使用すると、実際に何が実行されているかを確認できますnetstat
(OS X、Windows、Linux で使用可能で、コマンド ライン構文は 3 つすべてで異なります)。
Mac OS X システムでは、さまざまな PostgreSQL パッケージ (OS に組み込まれている Apple の古いバージョンの PostgreSQL、Postgres.app、Homebrew、Macports、EnterpriseDB インストーラなど) のひどい混乱により、状況はさらに複雑になります。
結局、ユーザーは Pg をインストールしてあるパッケージからサーバーを起動しますが、別のパッケージの とクライアントを使用します。通常、これは Postgres.app または自作の Pg を実行していて、OS に同梱されている に接続しているときに発生しますpsql
。これらには異なるデフォルトポートがあるだけでなく、Mac OS X に同梱されている Pg には異なるlibpq
psql
デフォルトの Unix ソケット パスしたがって、サーバーが同じポートで実行されている場合でも、同じ UNIX ソケットをリッスンすることはありません。
ほとんどの Mac ユーザーは、 で tcp/ip を使用するだけでこの問題を回避psql -h localhost
できます。必要に応じて、 などのポートを指定することもできます。複数の PostgreSQL インスタンスが稼働している可能性があるため、と をpsql -h localhost -p 5433
使用して正しいインスタンスに接続していることを確認してください。select version()
SHOW data_directory;
Unix ソケット ディレクトリを指定することもできます。unix_socket_directories
接続する PostgreSQL インスタンスの設定を確認し、 で指定します (psql -h
例: ) psql -h /tmp
。
よりクリーンな解決方法は、実際に実行している PostgreSQL に関連付けられていると がで最初に見つかるようPATH
にシステムを修正することです。 の詳細は、Mac OS X のバージョンとインストールされている Pg パッケージによって異なります。私は Mac を使用していないので、現在利用可能な時間以上に時間を費やさずにその点についてこれ以上の詳細を提供することはできません。psql
libpq
PATH